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 ClassDeclarationNode(string name)
        {
            Name = name;
            FunctionDeclarationNode defaultCtor = new FunctionDeclarationNode(name, new List <string>());

            defaultCtor.Children.Add(new ScopeNode());
            Children.Add(defaultCtor);
        }
        public static Node Parse(Parser parser)
        {
            parser.ExpectToken(TokenType.Keyword, "function");
            Token                   ident      = parser.ExpectToken(TokenType.Identifier);
            List <string>           parameters = ParseFunctionParameters(parser);
            FunctionDeclarationNode decl       = new FunctionDeclarationNode(ident.Value, parameters);

            decl.Children.Add(StatementNode.Parse(parser));
            return(decl);
        }
Exemple #4
0
 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);
     }
 }