From a0eb34f9a22af32538c07bd4cf48a5159d09564a Mon Sep 17 00:00:00 2001 From: Eryn Wells Date: Fri, 16 Dec 2016 10:10:05 -0800 Subject: [PATCH] Lex simple parentheses --- Sibil/Lexer.swift | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/Sibil/Lexer.swift b/Sibil/Lexer.swift index 32757e3..eec7719 100644 --- a/Sibil/Lexer.swift +++ b/Sibil/Lexer.swift @@ -9,7 +9,7 @@ import Foundation -struct Token { +struct Token: CustomDebugStringConvertible { enum Kind { case LeftParen case RightParen @@ -17,24 +17,38 @@ struct Token { let kind: Kind let value: String + + // MARK: CustomDebugStringConvertible + + var debugDescription: String { + return "Token(kind: .\(kind), value: \"\(value)\")" + } } -class Lexer: IteratorProtocol { - typealias Element = Token - +class Lexer { let input: String - private var index: String.Index + var index: String.Index init(input: String) { self.input = input self.index = input.startIndex } +} - // MARK: IteratorProtocol +extension Lexer: Sequence, IteratorProtocol { + typealias Element = Token + + func makeIterator() -> Lexer { + return self + } func next() -> Token? { + guard index != input.endIndex else { + return nil + } + var token: Token? while token == nil { let c = input[index] @@ -46,6 +60,7 @@ class Lexer: IteratorProtocol { default: break } + index = input.index(after: index) } return token }