18 private Lexer.TokenType token;
20 public Parser(StreamReader stream) {
21 lexer = new Lexer(stream);
25 token = lexer.GetNextToken();
30 if(token == Lexer.TokenType.EOF) {
36 Console.WriteLine("Token: " + token.ToString() + " - " +
40 case Lexer.TokenType.CLOSE_PAREN:
42 throw new Exception("Parse Error: unexpected )");
44 type = LispType.END_LIST;
46 case Lexer.TokenType.OPEN_PAREN:
47 type = LispType.START_LIST;
50 case Lexer.TokenType.SYMBOL:
51 type = LispType.SYMBOL;
53 case Lexer.TokenType.STRING:
54 type = LispType.STRING;
56 case Lexer.TokenType.TRUE:
57 type = LispType.BOOLEAN;
59 case Lexer.TokenType.INTEGER:
60 type = LispType.INTEGER;
66 public static void ParseIntList(Parser parser, System.Collections.Generic.List<int> intList) {
68 while(parser.Depth >= d) {
69 intList.Add(parser.IntegerValue);
74 private LispType type;
75 public LispType Type {
78 private bool delayinc;
84 public string SymbolValue {
85 get { return lexer.TokenString; }
87 public string StringValue {
88 get { return lexer.TokenString; }
90 public int IntegerValue {
91 get { return Int32.Parse(lexer.TokenString); }
93 public bool BoolValue {
94 get { return StringValue == "t"; }
96 public float FloatValue {
97 get { return Single.Parse(lexer.TokenString); }