public static ASTParser Build(Lexer lexer)
        {
            var astParser = new ASTParser(lexer);

            var numberDescription = new LiteralExpressionDescription(TokenType.Number, 0);

            astParser.AddExpression(numberDescription);

            astParser.AddExpression(new UnaryExpressionDescription(TokenType.Minus, 5));

            astParser.AddExpression(new BinaryExpressionDescription(numberDescription, TokenType.Plus, numberDescription, 1));
            astParser.AddExpression(new BinaryExpressionDescription(numberDescription, TokenType.Minus, numberDescription, 1));

            astParser.AddExpression(new BinaryExpressionDescription(numberDescription, TokenType.Star, numberDescription, 2));
            astParser.AddExpression(new BinaryExpressionDescription(numberDescription, TokenType.Slash, numberDescription, 2));

            astParser.AddExpression(new BlockExpressionDescription(TokenType.OpenParenthesis, TokenType.CloseParenthesis, 4));

            astParser.AddExpression(new LiteralExpressionDescription(TokenType.EOF, -1));

            return(astParser);
        }
Exemplo n.º 2
0
        private Expression ParseLiteralExpression(LiteralExpressionDescription led)
        {
            var token = _tokenList[_currentTokenIndex++];

            return(led.TokenType == TokenType.EOF ? null : new LiteralExpression(token));
        }