Exemplo n.º 1
0
        public override StatementNode VisitAdvancedReturn([NotNull] CoronaParser.AdvancedReturnContext context)
        {
            BuildValueAst valueVisitor = new BuildValueAst();

            try
            {
                IdentifierValueNode id = (IdentifierValueNode)valueVisitor.Visit(context.identifierValue());

                // Get returnMembers
                List <ReturnMemberNode> returnMembers = new List <ReturnMemberNode>();
                foreach (var rMember in context.returnMember())
                {
                    // Get ReturnMember value
                    ValueNode value;
                    if (rMember.expr() != null)
                    {
                        value = new BuildExpressionAst().Visit(rMember.expr());
                    }
                    else
                    {
                        value = new StringValueNode(rMember.STRING().GetText());
                    }

                    // Add new ReturnMember to list
                    returnMembers.Add(new ReturnMemberNode(
                                          (IdentifierValueNode)valueVisitor.Visit(rMember.identifierValue()),
                                          value)
                                      );
                }

                return(new AdvancedReturnStatementNode(id, returnMembers));
            }
            catch (TheLanguageErrorException e) { throw new TheLanguageErrorException("Return statement", e); }
        }
Exemplo n.º 2
0
        public override StatementNode VisitMemberAssignStatement([NotNull] CoronaParser.MemberAssignStatementContext context)
        {
            BuildValueAst      valueVisitor = new BuildValueAst();
            BuildExpressionAst exprVisitor  = new BuildExpressionAst();

            try
            {
                // Get GridPoint
                GridValueNode gridPoint = null;
                if (context.gridPoint() != null)
                {
                    gridPoint = (GridValueNode)valueVisitor.Visit(context.gridPoint());
                }

                // Get Member
                IdentifierValueNode memberID = new IdentifierValueNode(context.identifierValue().GetText());

                // Get value
                ValueNode value;
                if (context.expr() != null)
                {
                    value = exprVisitor.Visit(context.expr());
                }
                else
                {
                    value = new StringValueNode(context.STRING().GetText());
                }

                return(new MemberAssignmentStatementNode(gridPoint, memberID, value));
            }
            catch (TheLanguageErrorException e) { throw new TheLanguageErrorException("Member assignment statement", e); }
        }
Exemplo n.º 3
0
        public override StatementNode VisitIterationStatement([NotNull] CoronaParser.IterationStatementContext context)
        {
            BuildExpressionAst     exprVisitor = new BuildExpressionAst();
            IterationStatementNode node        = new IterationStatementNode();

            try
            {
                // Visit expressions
                node.Conditioner = exprVisitor.Visit(context.conditioner);

                // Visit statement
                node.Statement = Visit(context.statement());
            }
            catch (TheLanguageErrorException e) { throw new TheLanguageErrorException("Iteration statement", e); }

            return(node);
        }
Exemplo n.º 4
0
        public override StatementNode VisitMatchStatement([NotNull] CoronaParser.MatchStatementContext context)
        {
            BuildValueAst      valueVisitor = new BuildValueAst();
            BuildExpressionAst exprVisitor  = new BuildExpressionAst();

            // Visit each of the different elements to match against
            List <ValueNode> elements = new List <ValueNode>();

            foreach (var e in context.matchElement())
            {
                try
                {
                    if (e.member() != null)
                    {
                        elements.Add(valueVisitor.Visit(e.member()));
                    }

                    else if (e.gridPoint() != null)
                    {
                        elements.Add(valueVisitor.Visit(e.gridPoint()));
                    }

                    else if (e.expr() != null)
                    {
                        elements.Add(exprVisitor.Visit(e.expr()));
                    }
                }
                catch (TheLanguageErrorException excep) { throw new TheLanguageErrorException("Match statement value", excep); }
            }

            // Visit each CaseStatement
            List <CaseStatementNode> caseStatements = new List <CaseStatementNode>();

            try
            {
                foreach (CoronaParser.CaseStatementContext c in context.caseStatement())
                {
                    caseStatements.Add((CaseStatementNode)Visit(c));
                }
            }
            catch (TheLanguageErrorException e) { throw new TheLanguageErrorException("Match statement", e); }

            return(new MatchStatementNode(elements, caseStatements));
        }
Exemplo n.º 5
0
        public override ValueNode VisitGridPoint(CoronaParser.GridPointContext context)
        {
            BuildExpressionAst exprVisitor = new BuildExpressionAst();

            // Extract the two expressions
            CoronaParser.ExprContext[] exprs  = context.expr();
            ExpressionNode             first  = exprVisitor.Visit(exprs[0]);
            ExpressionNode             second = exprVisitor.Visit(exprs[1]);

            // Extract member if present
            IdentifierValueNode member = null;

            if (context.member() != null)
            {
                member = (IdentifierValueNode)Visit(context.member());
            }

            return(new GridValueNode(first, second, member));
        }
Exemplo n.º 6
0
        public override StatementNode VisitIdentifierAssignStatement([NotNull] CoronaParser.IdentifierAssignStatementContext context)
        {
            BuildValueAst      valueVisitor = new BuildValueAst();
            BuildExpressionAst exprVisitor  = new BuildExpressionAst();

            try
            {
                IdentifierValueNode id = valueVisitor.Visit(context.identifierValue()) as IdentifierValueNode;

                // Get value
                ValueNode value;
                if (context.expr() != null)
                {
                    value = exprVisitor.Visit(context.expr());
                }
                else
                {
                    value = new StringValueNode(context.STRING().GetText());
                }

                return(new IdentifierAssignmentStatementNode(id, value));
            }
            catch (TheLanguageErrorException e) { throw new TheLanguageErrorException("Identifier assignment statement", e); }
        }