Add tokens and token parser

This commit is contained in:
Kyle Fuller
2014-10-23 17:18:31 +01:00
parent 5af59ecb15
commit 02a1af2f44
7 changed files with 169 additions and 23 deletions

54
Stencil/Parser.swift Normal file
View File

@@ -0,0 +1,54 @@
//
// Parser.swift
// Stencil
//
// Created by Kyle Fuller on 23/10/2014.
// Copyright (c) 2014 Cocode. All rights reserved.
//
import Foundation
public class TokenParser {
private var tokens:[Token]
public init(tokens:[Token]) {
self.tokens = tokens
}
public func parse() -> [Node] {
return parse(nil)
}
public func parse(parse_until:((parser:TokenParser, token:Token) -> (Bool))?) -> [Node] {
var nodes = [Node]()
while tokens.count > 0 {
let token = nextToken()!
switch token {
case .Text(let text):
nodes.append(TextNode(text: text))
case .Variable(let variable):
nodes.append(VariableNode(variable: variable))
case .Block(let value):
continue
case .Comment(let value):
continue
}
}
return nodes
}
public func nextToken() -> Token? {
if tokens.count > 0 {
return tokens.removeAtIndex(0)
}
return nil
}
public func prependToken(token:Token) {
tokens.insert(token, atIndex: 0)
}
}