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); }
        }
        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); }
        }
        public override StatementNode VisitGridAssignStatement([NotNull] CoronaParser.GridAssignStatementContext context)
        {
            BuildValueAst valueVisitor = new BuildValueAst();

            try
            {
                IdentifierValueNode id        = new IdentifierValueNode(context.ID().GetText());
                GridValueNode       gridpoint = (GridValueNode)valueVisitor.Visit(context.gridPoint());

                return(new GridAssignmentStatementNode(gridpoint, id));
            }
            catch (TheLanguageErrorException e) { throw new TheLanguageErrorException("Grid assignment statement", e); }
        }
        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));
        }
Example #5
0
        public override MemberNode VisitMemberDeclaration(CoronaParser.MemberDeclarationContext context)
        {
            BuildValueAst memberValueVisitor = new BuildValueAst();

            // Extract label
            string label = context.ID().GetText();

            try
            {
                // Extract and call visit on all memberValues
                List <ValueNode> valueNodes = new List <ValueNode>();
                foreach (CoronaParser.MemberValueContext member in context.memberValue())
                {
                    valueNodes.Add(memberValueVisitor.Visit(member));
                }

                return(new MemberNode(label, valueNodes));
            }
            catch (TheLanguageErrorException e) { throw new TheLanguageErrorException($"Member \'{ label }\'", e); }
        }
        public override StatementNode VisitCaseStatement([NotNull] CoronaParser.CaseStatementContext context)
        {
            BuildValueAst valueVisitor = new BuildValueAst();

            CoronaParser.CaseValueContext[] caseValues = context.caseValue();

            // Extract all caseValues
            List <ValueNode> values = new List <ValueNode>();

            try
            {
                foreach (var value in caseValues)
                {
                    values.Add(valueVisitor.Visit(value));
                }
            }
            catch (TheLanguageErrorException e) { throw new TheLanguageErrorException("Case statement value", e); }

            return(new CaseStatementNode(values, Visit(context.statement())));
        }
        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); }
        }