Exemple #1
0
        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;
        }
Exemple #2
0
        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;
        }
Exemple #3
0
        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;
        }
Exemple #4
0
        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;
        }
Exemple #5
0
        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;
        }
Exemple #6
0
        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;
        }
Exemple #7
0
        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;
        }