public KAOSModel Parse(string input, string filename) { KAOSModel model = new KAOSModel(); Declarations = new Dictionary<KAOSMetaModelElement, IList<Declaration>> (); GoalModelParser _parser = new GoalModelParser (); Uri RelativePath = null; if (!string.IsNullOrEmpty (filename)) RelativePath = new Uri(Path.GetFullPath (Path.GetDirectoryName(filename) + "/")); FirstStageBuilder FSB = new FirstStageBuilder (model, Declarations, RelativePath); FormulaBuilder FB = new FormulaBuilder (model, Declarations, FSB, RelativePath); SecondStageBuilder SSB = new SecondStageBuilder (model, Declarations, FSB, FB, RelativePath); ThirdStageBuilder TSB = new ThirdStageBuilder (model, Declarations, FSB, SSB, FB, RelativePath); var elements = _parser.Parse (input, filename) as ParsedElements; FSB.BuildElementWithKeys (elements); SSB.BuildElement (elements); TSB.BuildElement (elements); // Ensure that there is at least one alternative system if (model.AlternativeSystems().Count() == 0) model.Add (new AlternativeSystem (model) { Name = "Default", Definition = "Default alternative" }); return model; }
public void ComputeInAlternatives(KAOSModel model) { this.model = model; foreach (var goal in model.RootGoals()) { goal.InSystems = new HashSet<AlternativeSystem> (model.AlternativeSystems()); DownPropagate (goal); } foreach (var g in model.RootGoals()) Simplify (g); }