sibil/Sibil/Lexer.swift

53 lines
948 B
Swift
Raw Normal View History

//
// Lexer.swift
// Sibil
//
// Created by Eryn Wells on 12/16/16.
// Copyright © 2016 Eryn Wells. All rights reserved.
//
import Foundation
struct Token {
enum Kind {
case LeftParen
case RightParen
}
let kind: Kind
let value: String
}
class Lexer: IteratorProtocol {
typealias Element = Token
let input: String
private var index: String.Index
init(input: String) {
self.input = input
self.index = input.startIndex
}
// MARK: IteratorProtocol
func next() -> Token? {
var token: Token?
while token == nil {
let c = input[index]
switch c {
case "(":
token = Token(kind: .LeftParen, value: String(c))
case ")":
token = Token(kind: .RightParen, value: String(c))
default:
break
}
}
return token
}
}