public Node Factor() { Node result = null; if (CurrentToken().type == TokenType.LEFT_PAREN) { MatchAndEat(TokenType.LEFT_PAREN); result = Expression(); MatchAndEat(TokenType.RIGHT_PAREN); } else if (IsNumber()) { Token token = MatchAndEat(TokenType.NUMBER); result = new NumberNode(Int32.Parse(token.text)); } else if (IsString()) { Token token = MatchAndEat(TokenType.STRING); result = new StringNode((token.text).ToString()); } else if (IsKeyWord()) { result = Variable(); } return(result); }
public static void main(string[] args) { NumberNode firstNumber = new NumberNode(100); NumberNode secondNumber = new NumberNode(200); Node sumNode = new BinOpNode(TokenType.ADD, firstNumber, secondNumber); Console.WriteLine("100 + 200 = " + sumNode.Eval()); Node compareNode = new BinOpNode(TokenType.LESS, firstNumber, secondNumber); Console.WriteLine("100 < 200 = " + compareNode.Eval()); }