public override object VisitIntArguments(CryslGrammarParser.IntArgumentsContext context)
        {
            Constraints finalConstraints = new Constraints();

            if (context.IMPLIES() == null)
            {
                Constraints Constraints = BuildIntConstraintsObject(context);
                finalConstraints = Constraints;
            }

            if (context.IMPLIES() != null)
            {
                Constraints primaryConstraints = BuildIntConstraintsObject(context);

                Constraints additionalConstraints = (Constraints)Visit(context.constraint());

                AdditionalConstraints addConstraints = new AdditionalConstraints();
                addConstraints.Object_Varname_Additional_Constraint = additionalConstraints.Object_Varname;
                addConstraints.Additional_Constraints_List          = additionalConstraints.Constraints_List;

                primaryConstraints.Additional_constraints = addConstraints;

                finalConstraints = primaryConstraints;
            }
            return(finalConstraints);
        }
        private Constraints BuildIntConstraintsObject(CryslGrammarParser.IntArgumentsContext context)
        {
            Constraints   constraints     = new Constraints();
            List <string> constraintsList = new List <string>();

            //If Primary Constraint
            if (context.VARNAME().Symbol.TokenIndex < context.IN().Symbol.TokenIndex)
            {
                constraints.Object_Varname = context.VARNAME().GetText();
            }

            StringBuilder constraintsBuilder = new StringBuilder();

            foreach (var digit in context.DIGIT())
            {
                //Primary Constraint List
                if (digit.Symbol.TokenIndex > context.OFB().Symbol.TokenIndex&& digit.Symbol.TokenIndex < context.CFB().Symbol.TokenIndex)
                {
                    constraintsBuilder.Append(digit.GetText());

                    //Add comma between digits
                    foreach (var comma in context.COMMA())
                    {
                        int tokenDifference = comma.Symbol.TokenIndex - digit.Symbol.TokenIndex;
                        if (tokenDifference == 1)
                        {
                            constraintsBuilder.Append(comma.GetText());
                        }
                    }
                }
            }
            var constraintBuilderString = constraintsBuilder.ToString();
            var splitArray = constraintBuilderString.Split(',');

            constraintsList = constraintsBuilder.ToString().Split(',').ToList();

            constraints.Constraints_List = constraintsList;
            return(constraints);
        }
예제 #3
0
 /// <summary>
 /// Visit a parse tree produced by the <c>IntArguments</c>
 /// labeled alternative in <see cref="CryslGrammarParser.constraint"/>.
 /// <para>
 /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
 /// on <paramref name="context"/>.
 /// </para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 /// <return>The visitor result.</return>
 public virtual Result VisitIntArguments([NotNull] CryslGrammarParser.IntArgumentsContext context)
 {
     return(VisitChildren(context));
 }