public static Node Parse(Parser parser) { parser.ExpectToken(TokenType.Keyword, "class"); string name = parser.ExpectToken(TokenType.Identifier).Value; ClassDeclarationNode clazz = new ClassDeclarationNode(name); parser.ExpectToken(TokenType.Brace, "{"); while (!parser.MatchToken(TokenType.Brace, "}")) { if (parser.MatchToken(TokenType.Keyword, "function")) { FunctionDeclarationNode func = (FunctionDeclarationNode)FunctionDeclarationNode.Parse(parser); if (func.Name == name) { clazz.Constructor = func; } clazz.Children.Add(func); } else { parser.ExpectToken(TokenType.Keyword, "function"); } } parser.ExpectToken(TokenType.Brace, "}"); return(clazz); }
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); } }