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 Cell Visit(GridValueNode node)
        {
            MathExpressionAstEvaluator exprVisitor = new MathExpressionAstEvaluator();

            int x = exprVisitor.Visit(node.FirstD);
            int y = exprVisitor.Visit(node.SecondD);

            // Wrap around if out of bounds
            while (x >= sender.X_Max)
            {
                x -= sender.X_Max;
            }

            while (x < 0)
            {
                x += sender.X_Max;
            }

            while (y >= sender.Y_Max)
            {
                y -= sender.Y_Max;
            }

            while (y < 0)
            {
                y += sender.Y_Max;
            }

            return(sender.GetCell(new Pos(x, y)));
        }
        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 GridAssignmentStatementNode(GridValueNode gridPoint, IdentifierValueNode id)
 {
     GridPoint  = gridPoint;
     Identifier = id;
 }
Example #5
0
 public MemberAssignmentStatementNode(GridValueNode gridPoint, IdentifierValueNode memberID, ValueNode value)
 {
     GridPoint = gridPoint;
     MemberID  = memberID;
     Value     = value;
 }