private static void GetExpansions(StateNode state, ElementNode elementNode, CounterExampleState counterExampleState, ILanguageSpecificModel languageSpecificModel) { try { var dafnyModel = GetFieldValue <DafnyModel>(state, "dm"); var elt = GetFieldValue <Model.Element>(elementNode, "elt"); var extras = dafnyModel.GetExpansion(state, elt); foreach (var el in extras) { counterExampleState.Variables.Add(new CounterExampleVariable { Name = elementNode.Name + "." + el.Name, Value = el.Value, CanonicalName = languageSpecificModel.CanonicalName(el.Element) }); } } catch (Exception e) { Console.Error.WriteLine(e.Message); } }
private CounterExample ConvertModels(List <DafnyModel> specificModels) { foreach (var dafnyModel in specificModels) { var counterExample = new CounterExample(); foreach (var state in dafnyModel.States) { if (state == null) { continue; } var counterExampleState = new CounterExampleState { Name = state.FullStateName }; AddLineInformation(counterExampleState, state.FullStateName); var vars = state.ExpandedVariableSet(maximumCounterexampleDepth); foreach (var variableNode in vars) { counterExampleState.Variables.Add(new CounterExampleVariable { Name = variableNode.ShortName, Value = variableNode.Value, // CanonicalName is same as Value now but keeping this for legacy CanonicalName = variableNode.Value }); } var index = counterExample.States.FindIndex(c => c.Column == counterExampleState.Column && c.Line == counterExampleState.Line); if (index != -1) { counterExample.States[index] = counterExampleState; } else { counterExample.States.Add(counterExampleState); } } return(counterExample); } return(new CounterExample()); }
private CounterExample ConvertModels(List <ILanguageSpecificModel> specificModels) { foreach (var languageSpecificModel in specificModels) { var counterExample = new CounterExample(); foreach (var s in languageSpecificModel.States) { var state = s as StateNode; if (state == null) { continue; } var counterExampleState = new CounterExampleState { Name = state.CapturedStateName }; AddLineInformation(counterExampleState, state.CapturedStateName); foreach (var variableNode in state.Vars) { counterExampleState.Variables.Add(new CounterExampleVariable { Name = variableNode.ShortName, Value = variableNode.Value, CanonicalName = languageSpecificModel.CanonicalName(variableNode.Element) }); GetExpansions(state, variableNode, counterExampleState, languageSpecificModel); } var index = counterExample.States.FindIndex(c => c.Column == counterExampleState.Column && c.Line == counterExampleState.Line); if (index != -1) { counterExample.States[index] = counterExampleState; } else { counterExample.States.Add(counterExampleState); } } return(counterExample); } return(new CounterExample()); }
private void AddLineInformation(CounterExampleState state, string stateCapturedStateName) { if ("<initial>".Equals(stateCapturedStateName)) { state.Line = 0; state.Column = 0; return; } var regex = ".*?(dfy)(\\()(\\d+)(,)(\\d+)(\\))"; var r = new Regex(regex, RegexOptions.IgnoreCase | RegexOptions.Singleline); var m = r.Match(stateCapturedStateName); if (m.Success) { var lineStr = m.Groups[3].ToString(); state.Line = int.Parse(lineStr); var columnStr = m.Groups[5].ToString(); state.Column = int.Parse(columnStr); } }