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); } } }
public void IDENTIFIER(ParseNode node) { node.AddChild(new ParseNode("id", _lookahead.Value)); Match(TokenType.IDENTIFIER); }
public void OPERATOR(ParseNode node) { node.AddChild(new ParseNode("op", _lookahead.Value)); Match(TokenType.OPERATOR); }
public void VALUE(ParseNode node) { node.AddChild(new ParseNode("val", _lookahead.Value)); Match(TokenType.VALUE); }