Esempio n. 1
0
        protected virtual ParenthesizedExpressionNode ParseParenthesizedExpression(IPrimaryParentNode parent, SpecialCharacterToken leftParenthesis)
        {
            // PARSE: '(' <expression> ')'
            ParenthesizedExpressionNode result = new ParenthesizedExpressionNode(parent, leftParenthesis);

            Token          token      = this.GetNextTokenxx(Preference.NegativeSign);
            ExpressionNode expression = this.ParseExpression(result, token);

            if (expression == null)
            {
                this.ReportParserError(result, SemanticErrors.MissingExpression, token);
                return(result);
            }

            // Ensure the parentheses are properly closed.
            token = this.GetNextTokenxx(Preference.Default);
            SpecialCharacterToken rightParenthesis = null;

            if (Parser.IsClosingParenthesis(token))
            {
                rightParenthesis = (SpecialCharacterToken)token;
            }
            else
            {
                this.ReportParserError(result, SemanticErrors.MissingExpressionClosingParenthesis, token);
                this.ResidueToken = token;
            }

            result.SetContents(expression, rightParenthesis);
            return(result);
        }
Esempio n. 2
0
        public override Node visitParenthesizedExpression(JuliarParser.ParenthesizedExpressionContext ctx)
        {
            ParenthesizedExpressionNode node = new ParenthesizedExpressionNode();

            iterateWithTryCatch(ctx, node);
            return(node);
        }
Esempio n. 3
0
        public override Expression VisitParenthesizedExpression(ParenthesizedExpressionNode node)
        {
            ExpressionVisitor visitor = new ExpressionVisitor(this);
            Expression        result  = node.Expression.Accept(visitor);

            this.IsConstant = visitor.IsConstant;
            return(result);
        }
Esempio n. 4
0
        /// <summary>
        /// Visits the Parenthesized Expression node.
        /// </summary>
        /// <param name="node">The node to visit.</param>
        public virtual TResult VisitParenthesizedExpression(ParenthesizedExpressionNode node)
        {
            if (node.Expression != null)
            {
                node.Expression.Accept(this);
            }

            return(default(TResult));            // The default naive implementation
        }
Esempio n. 5
0
        /// <summary>
        /// Visits the Parenthesized Expression node.
        /// </summary>
        /// <param name="node">The node to visit.</param>
        public override bool VisitParenthesizedExpression(ParenthesizedExpressionNode node)
        {
            if (node.Parent == null)
            {
                return(false);
            }

            if ((node.LeftParenthesis == null) ^ (node.RightParenthesis == null))
            {
                return(false);
            }
            if ((node.Expression == null) || !node.Expression.Accept(this))
            {
                return(false);
            }

            return(true);
        }
Esempio n. 6
0
 /// <summary>
 /// Visits the Parenthesized Expression node.
 /// </summary>
 /// <param name="node">The node to visit.</param>
 public virtual TResult VisitParenthesizedExpression(ParenthesizedExpressionNode node)
 {
     throw new NotImplementedException();
 }
Esempio n. 7
0
 public override Expression VisitParenthesizedExpression(ParenthesizedExpressionNode node)
 {
     return(node.Expression.Accept(new ExpressionVisitor(this)));
 }
Esempio n. 8
0
 public virtual void VisitParenthesizedExpressionNode(ParenthesizedExpressionNode node)
 {
     Visit(node.OpenParenthesisNode);
     Visit(node.ExpressionNode);
     Visit(node.CloseParenthesisNode);
 }
Esempio n. 9
0
 public virtual void VisitParenthesizedExpressionNode(ParenthesizedExpressionNode node)
 {
     Visit(node.OpenParenthesisNode);
     Visit(node.ExpressionNode);
     Visit(node.CloseParenthesisNode);
 }
Esempio n. 10
0
 private Expression BindParenthesizedExpression(ParenthesizedExpressionNode node) => DoBindExpression(node.Expression);
Esempio n. 11
0
        private List <ExpressionNode> PrimaryExpression()
        {
            printDebug("Primary Expression");
            if (Match(TokenType.NEW_KEYWORD))
            {
                ConsumeToken();
                var left  = InstanceExpression();
                var right = PrimaryExpressionPrime();

                var ret = new List <ExpressionNode>();

                ret.Add(left);
                ret.AddRange(right);

                return(ret);
            }
            else if (MatchAny(this.literals))
            {
                var token = ConsumeToken();
                var left  = new LiteralExpressionNode(token) as ExpressionNode;
                var right = PrimaryExpressionPrime();

                var ret = new List <ExpressionNode>();

                ret.Add(left);
                ret.AddRange(right);
                return(ret);
            }
            else if (Match(TokenType.ID))
            {
                var token = ConsumeToken();
                var left  = new IdentifierExpressionNode(token) as ExpressionNode;
                var right = PrimaryExpressionPrime();

                var ret = new List <ExpressionNode>();
                if (right.Count > 0 &&
                    (
                        (right[0] is FunctionCallExpressionNode && ((FunctionCallExpressionNode)right[0]).identifier == null) ||
                        (right[0] is ArrayAccessExpressionNode && ((ArrayAccessExpressionNode)right[0]).identifier == null) ||
                        (right[0] is PostAdditiveExpressionNode && ((PostAdditiveExpressionNode)right[0]).indentifier == null)
                    )
                    )
                {
                    if (right[0] is FunctionCallExpressionNode)
                    {
                        ((FunctionCallExpressionNode)right[0]).identifier = left;
                    }
                    else if (right[0] is ArrayAccessExpressionNode)
                    {
                        ((ArrayAccessExpressionNode)right[0]).identifier = left;
                    }
                    else
                    {
                        ((PostAdditiveExpressionNode)right[0]).indentifier = left;
                    }
                }
                else
                {
                    ret.Add(left);
                }
                ret.AddRange(right);

                return(ret);
            }
            else if (Match(TokenType.PAREN_OPEN))
            {
                ConsumeToken();
                var expr = Expression();
                MatchExactly(TokenType.PAREN_CLOSE);

                var right = PrimaryExpressionPrime();
                //REVISAR EL PRIMARY EXPRESSION PRIME
                if (right.Count > 0 && (right[0] is FunctionCallExpressionNode || right[0] is ArrayAccessExpressionNode || (right[0] is PostAdditiveExpressionNode)))
                {
                    if (right[0] is FunctionCallExpressionNode)
                    {
                        ((FunctionCallExpressionNode)right[0]).identifier = expr;
                    }
                    else if (right[0] is ArrayAccessExpressionNode)
                    {
                        ((ArrayAccessExpressionNode)right[0]).identifier = expr;
                    }
                    else
                    {
                        ((PostAdditiveExpressionNode)right[0]).indentifier = expr;
                    }
                    return(right);
                }
                else
                {
                    var internal_expression = new ParenthesizedExpressionNode(expr);

                    var ret = new List <ExpressionNode>();
                    ret.Add(internal_expression);
                    ret.AddRange(right);

                    return(ret);
                }
            }
            else if (Match(TokenType.THIS_KEYWORD))
            {
                var token = MatchExactly(TokenType.THIS_KEYWORD);
                var left  = new ReferenceAccessNode(token) as ExpressionNode;
                var right = PrimaryExpressionPrime();

                var ret = new List <ExpressionNode>();
                ret.Add(left);
                ret.AddRange(right);

                return(ret);
            }
            else if (Match(TokenType.BASE_KEYWORD))
            {
                var token = MatchExactly(TokenType.BASE_KEYWORD);
                var left  = new ReferenceAccessNode(token) as ExpressionNode;
                var right = PrimaryExpressionPrime();

                var ret = new List <ExpressionNode>();
                ret.Add(left);
                ret.AddRange(right);

                return(ret);
            }
            else if (MatchAny(this.buildInTypes))
            {
                var token = ConsumeToken();
                var left  = new BuiltInTypeExpressionNode(token) as ExpressionNode;
                var right = PrimaryExpressionPrime();
                var ret   = new List <ExpressionNode>();
                ret.Add(left);
                ret.AddRange(right);

                return(ret);
            }
            else
            {
                ThrowSyntaxException("new, literal, identifier, '(' or 'this' expected");
                return(null);
            }
        }