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 }
// 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(); } }