コード例 #1
0
        Serialisable CreateIndex(bool primary = false)
        {
            var id = MustBeID();

            Mustbe(Sym.FOR);
            var          tb   = MustBeID();
            var          cols = Cols();
            Serialisable rt   = Serialisable.Null;

            if (lxr.tok == Sym.REFERENCES)
            {
                Next();
                rt = MustBeID();
            }
            return(new SCreateIndex(id, tb, SBoolean.For(primary), rt, cols)); // ok
        }
コード例 #2
0
        // This function does not get called anymore
        // But im still leaving it here in case it is needed later

        /*
         * public void traverseTree<T>(TransitionSystem<T> transitionSystem, ref HashSet<T> already_expanded, ref Queue<T> newStates, ref T state_a, ref bool terminalStatesEncountered)
         *  where T : struct, Modest.Exploration.IState<T>
         * {
         *
         *
         *  int newSize = newStates.Count;
         *
         *
         *
         *  while (newSize > 0)
         *  {
         *      //Console.WriteLine(newSize);
         *      //Console.WriteLine(newSize);
         *      int count = 0;
         *      var state = newStates.Dequeue();
         *
         *      //if (!(oldStates.Contains(state)))
         *      //already_expanded.Add(state);
         *      T successor;
         *
         *      foreach (var transition in transitionSystem.GetTransitions(ref state))
         *      {
         *          transitionSystem.GetTargetState(ref state, transition, out successor);
         *
         *          if (already_expanded.Add(successor))
         *          {
         *              newStates.Enqueue(successor);
         *              //newestStates.Add(successor);
         *          }
         *
         *          count++;
         *      }
         *
         *      newSize = newStates.Count;
         *
         *      // If no transition has been encountered for this state it was terminal
         *      if (count == 0)
         *          terminalStatesEncountered = true;
         *  }
         *
         *
         * }
         */


        /*
         * Parses the property into our own tree structure
         */

        public void parseStateFormula(Property property, out StateFormula result, ref bool is_ctl)
        {
            StateFormula state1, state2;
            Property     property1, property2;
            int          temp;


            if (property.GetType() == typeof(True))
            {
                result = new SBoolean(true);
            }
            else if (property.GetType() == typeof(False))
            {
                result = new SBoolean(false);
            }
            else if (property.GetType() == typeof(AtomicProposition))
            {
                result = new SAtomic((AtomicProposition)property);
            }
            else if (property.GetType() == typeof(And))
            {
                property1 = ((And)property).LeftOperand;
                property2 = ((And)property).RightOperand;

                parseStateFormula(property1, out state1, ref is_ctl);
                parseStateFormula(property2, out state2, ref is_ctl);

                result = new SAnd(state1, state2);
            }
            else if (property.GetType() == typeof(Or))
            {
                property1 = ((Or)property).LeftOperand;
                property2 = ((Or)property).RightOperand;

                parseStateFormula(property1, out state1, ref is_ctl);
                parseStateFormula(property2, out state2, ref is_ctl);

                result = new SOr(state1, state2);
            }
            else if (property.GetType() == typeof(Not))
            {
                property1 = ((Not)property).Operand;

                parseStateFormula(property1, out state1, ref is_ctl);

                result = new SNot(state1);
            }
            else if (property.GetType() == typeof(Exists))
            {
                property1 = ((Exists)property).Operand;
                parseTemporalOperator(property1, out state1, out state2, ref is_ctl, out temp);

                switch (temp)
                {
                case 0:
                    result = new SENext(state1);
                    break;

                case 1:
                    result = new SEUntil(state1, state2);
                    break;

                case 2:
                    result = new SEFinally(state1);
                    break;

                case 3:
                    result = new SEAlways(state1);
                    break;

                case 4:
                    result = new SEWeakUntil(state1, state2);
                    break;

                default:
                    result = new SError();
                    is_ctl = false;
                    break;
                }
            }
            else if (property.GetType() == typeof(ForAll))
            {
                property1 = ((ForAll)property).Operand;
                parseTemporalOperator(property1, out state1, out state2, ref is_ctl, out temp);

                switch (temp)
                {
                case 0:
                    result = new SANext(state1);
                    break;

                case 1:
                    result = new SAUntil(state1, state2);
                    break;

                case 2:
                    result = new SAFinally(state1);
                    break;

                case 3:
                    result = new SAAlways(state1);
                    break;

                case 4:
                    result = new SAWeakUntil(state1, state2);
                    break;

                default:
                    result = new SError();
                    is_ctl = false;
                    break;
                }
            }
            else
            {
                is_ctl = false;
                result = new SError();
            }
        }