private Node AndExpressionRest(Node node) { Node result; if (lex.Token == Token.And) { lex.Next(); Node right = LogicalOrExpression(); result = new BinaryNode { Left = node, Operator = BinaryOperator.And, Right = right }; result = AndExpressionRest(result); } else { result = node; } return result; }
private Node BooleanCompareExpressionExpressionRest(Node node) { Node result; BinaryOperator op; switch (lex.Token) { case Token.Less: op = BinaryOperator.IsLess; break; case Token.Greater: op = BinaryOperator.IsGreater; break; case Token.LessOrEqual: op = BinaryOperator.IsLessOrEqual; break; case Token.GreaterOrEqual: op = BinaryOperator.IsGreaterOrEqual; break; default: op = BinaryOperator.Undefined; break; } if (op != BinaryOperator.Undefined) { lex.Next(); Node right = TermExpression(); result = new BinaryNode { Left = node, Operator = op, Right = right }; result = BooleanCompareExpressionExpressionRest(result); } else { result = node; } return result; }
private Node TermExpressionRest(Node node) { Node result; BinaryOperator op = BinaryOperator.Undefined; if (lex.Token == Token.Plus) { op = BinaryOperator.Add; } else if (lex.Token == Token.Minus) { op = BinaryOperator.Subtract; } if (op != BinaryOperator.Undefined) { lex.Next(); Node right = FactorExpression(); result = new BinaryNode { Left = node, Operator = op, Right = right }; result = TermExpressionRest(result); } else { result = node; } return result; }
private Node MemberExpressionRest(Node node) { Node result; if (lex.Token == Token.Dot) { lex.Next(); Node right = LateBindingIdentifierExpression(); result = new BinaryNode { Left = node, Operator = BinaryOperator.InvokeMember, Right = right }; result = MemberExpressionRest(result); } else { result = node; } return result; }
private Node LogicalAndExpressionRest(Node node) { Node result; if (lex.Token == Token.BitwiseAnd) { lex.Next(); Node right = BooleanEqualityExpression(); result = new BinaryNode { Left = node, Operator = BinaryOperator.BitwiseAnd, Right = right }; result = LogicalAndExpressionRest(result); } else { result = node; } return result; }
private Node FactorExpressionRest(Node node) { Node result; BinaryOperator op; switch (lex.Token) { case Token.Multiply: op = BinaryOperator.Multiply; break; case Token.Divide: op = BinaryOperator.Divide; break; case Token.Modulus: op = BinaryOperator.Modulus; break; case Token.Power: op = BinaryOperator.Power; break; default: op = BinaryOperator.Undefined; break; } if (op != BinaryOperator.Undefined) { lex.Next(); Node right = NotExpression(); result = new BinaryNode { Left = node, Operator = op, Right = right }; result = FactorExpressionRest(result); } else { result = node; } return result; }
private Node BooleanEqualityExpressionRest(Node node) { Node result; BinaryOperator op = BinaryOperator.Undefined; if (lex.Token == Token.Equal) { op = BinaryOperator.IsEqual; } else if (lex.Token == Token.NotEqual) { op = BinaryOperator.IsNotEqual; } if (op != BinaryOperator.Undefined) { lex.Next(); Node right = BooleanCompareExpression(); result = new BinaryNode { Left = node, Operator = op, Right = right }; result = BooleanEqualityExpressionRest(result); } else { result = node; } return result; }