public override object VisitEnsureslist(CryslGrammarParser.EnsureslistContext context)
        {
            List <EnsuresObject> ensuresList = new List <EnsuresObject>();

            foreach (var ensure in context.ensure())
            {
                EnsuresObject ensuresObject = (EnsuresObject)Visit(ensure);
                ensuresList.Add(ensuresObject);
            }

            return(ensuresList);
        }
        public override object VisitEnsure(CryslGrammarParser.EnsureContext context)
        {
            EnsuresObject ensuresObject   = new EnsuresObject();
            List <string> ensuresList     = new List <string>();
            List <string> afterEventsList = new List <string>();
            bool          containsAfter   = false;

            if (context.AFTER() != null)
            {
                containsAfter = true;
            }
            foreach (var varName in context.VARNAME())
            {
                //Initialize the Function Name
                if (varName.Symbol.TokenIndex < context.OSB().Symbol.TokenIndex)
                {
                    ensuresObject.FuncName = varName.GetText();
                }

                //Compute the Ensures List
                else if (varName.Symbol.TokenIndex > context.OSB().Symbol.TokenIndex&& varName.Symbol.TokenIndex < context.CSB().Symbol.TokenIndex)
                {
                    ensuresList.Add(varName.GetText());
                }

                //Check for After Events
                else if (containsAfter)
                {
                    if (varName.Symbol.TokenIndex > context.AFTER().Symbol.TokenIndex)
                    {
                        afterEventsList.Add(varName.GetText());
                    }
                }
            }

            ensuresObject.EnsuresList     = ensuresList;
            ensuresObject.AfterEventsList = afterEventsList;

            return(ensuresObject);
        }