Ejemplo n.º 1
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);
     }
 }
Ejemplo n.º 2
0
        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);
        }