Пример #1
0
        public void EXPRESSION(ParseNode node)
        {
            var expressionNode = new ParseNode("expr");
            node.AddChild(expressionNode);

            while (_lookahead.Type != TokenType.CLOSE_PARENTHESIS && _lookahead.Type != TokenType.EOF)
            {
                switch (_lookahead.Type)
                {
                    case TokenType.OPEN_PARENTHESIS:
                        Match(TokenType.OPEN_PARENTHESIS);
                        EXPRESSION(expressionNode);
                        Match(TokenType.CLOSE_PARENTHESIS);
                        continue;
                    case TokenType.IDENTIFIER:
                        IDENTIFIER(expressionNode);
                        continue;
                    case TokenType.OPERATOR:
                        OPERATOR(expressionNode);
                        continue;
                    case TokenType.VALUE:
                        VALUE(expressionNode);
                        continue;
                    default:
                        throw new Exception("Unexpected token, found " + _lookahead.Type);
                }
            }
        }
Пример #2
0
 public void IDENTIFIER(ParseNode node)
 {
     node.AddChild(new ParseNode("id", _lookahead.Value));
     Match(TokenType.IDENTIFIER);
 }
Пример #3
0
 public void OPERATOR(ParseNode node)
 {
     node.AddChild(new ParseNode("op", _lookahead.Value));
     Match(TokenType.OPERATOR);
 }
Пример #4
0
 public void VALUE(ParseNode node)
 {
     node.AddChild(new ParseNode("val", _lookahead.Value));
     Match(TokenType.VALUE);
 }