Exemple #1
0
        private Expression ParseLogicalExpression()
        {
            Expression left = ParseEqualityExpression();

            while (IsLogicalOperator())
            {
                var op    = ParseBinaryOperator();
                var right = ParseEqualityExpression();
                left = new BinaryExpression(CreateSpan(left), left, right, op);
                statm.Add(left);
            }
            return(left);
        }
        protected void VisitBinary(BinaryExpression expression)
        {
            switch (expression.Operator)
            {
            case BinaryOperator.Assign:
                VisitAssignment(expression);
                break;

            case BinaryOperator.Equal:
            case BinaryOperator.GreaterThan:
            case BinaryOperator.GreaterThanOrEqual:
            case BinaryOperator.LessThanOrEqual:
            case BinaryOperator.NotEqual:
                VisitLogical(expression);
                break;
            }
        }
        void CreateVariable(SyntaxNode node)
        {
            BinaryExpression binExpr = (BinaryExpression)node;

            if (variable.ContainsKey(((IdentifierExpression)binExpr.Left).Identifier))
            {
                variable.Remove(((IdentifierExpression)binExpr.Left).Identifier);
            }

            if (binExpr.Right.Kind == SyntaxKind.ConstantExpression)
            {
                variable.Add(((IdentifierExpression)binExpr.Left).Identifier,
                             ((ConstantExpression)binExpr.Right).Value);
            }

            if (binExpr.Right.Kind == SyntaxKind.IdentifierExpression)
            {
                variable.Add(((IdentifierExpression)binExpr.Left).Identifier,
                             ((IdentifierExpression)binExpr.Right).Identifier);
            }
        }
Exemple #4
0
        private Expression ParseAssignmentExpression()
        {
            // Console.WriteLine($" start in assign");

            Expression left  = ParsePrimaryExpression();
            Token      lasts = last;

            if (IsAssignmentOperator())
            {
                // Assignment is right-associative.

                var        op    = ParseBinaryOperator();
                Expression right = ParseAssignmentExpression();

                // Console.WriteLine($"in assign");

                BinaryExpression b = new BinaryExpression(CreateSpan(left), left, right, op);
                statm.Add(b);
                return(b);
            }

            return(left);
        }
        // protected abstract void VisitArithmetic(BinaryExpression expression);

        protected abstract void VisitAssignment(BinaryExpression expression);
 protected abstract void VisitLogical(BinaryExpression expression);