public Expression ParseArithOp() { Expression result; ExpressionClass operandA = ParseRelation(); result = new Expression(operandA.CodeLineNumber, operandA.CodeColumnNumber, operandA.CodeCharacterIndex); if (NextTokenType == Token.Types.ADD || NextTokenType == Token.Types.SUB) // Second operand { result.Operator = Scanner.ConsumeExpressionOperator(); ExpressionClass operandB = ParseRelation(); } return result; }
public Expression ParseRelation() { Expression result; ExpressionClass operandA = ParseTerm(); result = new Expression(operandA.CodeLineNumber, operandA.CodeColumnNumber, operandA.CodeCharacterIndex); if (NextTokenType == Token.Types.LESSTHAN || NextTokenType == Token.Types.LESSTHAN_EQUAL || NextTokenType == Token.Types.GREATERTHAN || NextTokenType == Token.Types.GREATERTHAN_EQUAL || NextTokenType == Token.Types.EQUAL || NextTokenType == Token.Types.NOT_EQUAL) // Second operand { result.Operator = Scanner.ConsumeExpressionOperator(); ExpressionClass operandB = ParseTerm(); } return result; }
public Expression ParseTerm() { Expression result; ExpressionClass operandA = ParseFactor(); result = new Expression(operandA.CodeLineNumber, operandA.CodeColumnNumber, operandA.CodeCharacterIndex); if (NextTokenType == Token.Types.MUL || NextTokenType == Token.Types.DIV) // Second operand { result.Operator = Scanner.ConsumeExpressionOperator(); ExpressionClass operandB = ParseFactor(); } return result; }
public Expression ParseExpression() { Expression result; if (NextTokenType == Token.Types.NOT) // Negated { Token notToken = Scanner.ConsumeKeywordToken(Token.Types.NOT); result = new Expression(notToken.CodeLineNumber, notToken.CodeColumnNumber, notToken.CodeCharacterIndex); result.Operator = Lexer.Operators.NOT; result.OperandA = ParseArithOp(); } else // Not negated { ExpressionClass operandA = ParseArithOp(); result = new Expression(operandA.CodeLineNumber, operandA.CodeColumnNumber, operandA.CodeCharacterIndex); if (NextTokenType == Token.Types.AND || NextTokenType == Token.Types.OR) // Second operand { result.Operator = Scanner.ConsumeExpressionOperator(); ExpressionClass operandB = ParseArithOp(); } } return result; }