Пример #1
0
        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;
        }
Пример #2
0
        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;
        }
Пример #3
0
        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;
        }
Пример #4
0
        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;
        }