public static Node Parse(Parser parser) { if (parser.MatchToken(TokenType.Keyword, "class")) { return(ClassDeclarationNode.Parse(parser)); } else if (parser.MatchToken(TokenType.Keyword, "function")) { return(FunctionDeclarationNode.Parse(parser)); } else if (parser.MatchToken(TokenType.Keyword, "if")) { return(IfNode.Parse(parser)); } else if (parser.MatchToken(TokenType.Keyword, "while")) { return(WhileNode.Parse(parser)); } else if (parser.MatchToken(TokenType.Keyword, "for")) { return(ForNode.Parse(parser)); } else if (parser.MatchToken(TokenType.Keyword, "return")) { return(ReturnNode.Parse(parser)); } else if (parser.MatchToken(TokenType.Keyword, "incfile")) { return(UseNode.Parse(parser)); } else if (parser.MatchToken(TokenType.Keyword, "enum")) { return(EnumDeclarationNode.Parse(parser)); } else if (parser.MatchToken(TokenType.Brace, "{")) { return(ScopeNode.Parse(parser)); } else { ExpressionNode expr = new ExpressionNode(ExpressionNode.Parse(parser)); parser.ExpectToken(TokenType.Semicolon); return(expr); } }
public static Node Parse(Parser parser) { parser.ExpectToken(TokenType.Keyword, "enum"); string name = parser.ExpectToken(TokenType.Identifier).Value; EnumDeclarationNode decl = new EnumDeclarationNode(name); parser.ExpectToken(TokenType.Brace, "{"); int defaultVal = -1; while (!parser.MatchToken(TokenType.Brace, "}")) { string ident = parser.ExpectToken(TokenType.Identifier).Value; if (parser.AcceptToken(TokenType.Operator, "=")) { string val = parser.ExpectToken(TokenType.Number).Value; int numVal = 0; if (val != "") { numVal = int.Parse(val); } decl.Items[ident] = numVal; } else { decl.Items[ident] = defaultVal--; } if (!parser.AcceptToken(TokenType.Comma)) { break; } } parser.ExpectToken(TokenType.Brace, "}"); return(decl); }