public TemplateVisualizer(ErrorManager errorManager, DebugTemplate root, string output, Interpreter interpreter, List <string> trace, ReadOnlyCollection <TemplateMessage> errors) { if (errorManager == null) { throw new ArgumentNullException("errorManager"); } if (root == null) { throw new ArgumentNullException("root"); } if (interpreter == null) { throw new ArgumentNullException("interpreter"); } if (trace == null) { throw new ArgumentNullException("trace"); } if (errors == null) { throw new ArgumentNullException("errors"); } _errorManager = errorManager; _root = root; _output = output; _interpreter = interpreter; _trace = trace; _errors = errors; }
private void HandleCallHierarchyTreeViewSelectedItemChanged(object sender, RoutedPropertyChangedEventArgs <object> e) { TemplateCallHierarchyViewModel selected = CallHierarchyTreeView.SelectedItem as TemplateCallHierarchyViewModel; if (selected != null) { currentTemplate = selected.Template; UpdateCurrentTemplate(); } }
public TemplateCallHierarchyViewModel(Interpreter interpreter, DebugTemplate template) { if (interpreter == null) { throw new ArgumentNullException("interpreter"); } if (template == null) { throw new ArgumentNullException("template"); } this._interpreter = interpreter; this._template = template; }
private void HandleErrorsListBoxSelectionChanged(object sender, SelectionChangedEventArgs e) { int minIndex = ErrorsListBox.SelectedIndex; TemplateMessage message = ErrorsListBox.SelectedItem as TemplateMessage; TemplateRuntimeMessage runtimeMessage = message as TemplateRuntimeMessage; if (runtimeMessage != null) { Interval interval = runtimeMessage.SourceInterval; currentTemplate = (DebugTemplate)message.Self; UpdateCurrentTemplate(); Highlight(TemplateTextBox.Document, interval); } }
private void HandleOutputTextBoxSelectionChanged(object sender, RoutedEventArgs e) { InterpEvent de = FindEventAtOutputLocation(ViewModel.AllEvents, OutputTextBox.Document.GetCharOffsetToPosition(OutputTextBox.CaretPosition)); if (de == null) { currentTemplate = ViewModel.Visualizer.RootTemplate; } else { currentTemplate = de.Template; } UpdateCurrentTemplate(); }
public static void Visualize(this DebugTemplate template, ErrorManager errorManager, CultureInfo culture, int lineWidth) { ErrorBuffer errors = new ErrorBuffer(); template.impl.NativeGroup.Listener = errors; StringWriter @out = new StringWriter(); ITemplateWriter wr = new AutoIndentWriter(@out); wr.LineWidth = lineWidth; Interpreter interp = new Interpreter(template.groupThatCreatedThisInstance, culture); interp.Execute(wr, template); // Render and track events TemplateVisualizer visualizer = new TemplateVisualizer(errorManager, template, @out.ToString(), interp, interp.GetExecutionTrace(), errors.Errors); visualizer.Show(); }
private int GetIndexOfChild(DebugTemplate parent, Template child) { if (parent == null) { throw new ArgumentNullException("parent"); } if (child == null) { throw new ArgumentNullException("child"); } TemplateCallHierarchyViewModel hierarchy = new TemplateCallHierarchyViewModel(ViewModel.Visualizer.Interpreter, parent); List <TemplateCallHierarchyViewModel> children = hierarchy.Children; return(children.FindIndex(i => i.Template == child)); }
public void TestString() { string templates = "t() ::= <<foo>>" + Environment.NewLine; writeFile(tmpdir, "t.stg", templates); TemplateGroup group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.Debug = true; DebugTemplate st = (DebugTemplate)group.GetInstanceOf("t"); List <InterpEvent> events = st.GetEvents(); string expected = "[EvalExprEvent{self=t(), output=[0..3), expr=foo}," + " EvalTemplateEvent{self=t(), output=[0..3)}]"; string result = events.ToListString(); Assert.AreEqual(expected, result); }
public void SimpleVisualizerTest() { string templates = "method(type,name,locals,args,stats) ::= <<\n" + "public <type> <ick()> <name>(<args:{a| int <a>}; separator=\", \">) {\n" + " <if(locals)>int locals[<locals>];<endif>\n" + " <stats;separator=\"\\n\">\n" + "}\n" + ">>\n" + "assign(a,b) ::= \"<a> = <b>;\"\n" + "return(x) ::= <<return <x>;>>\n" + "paren(x) ::= \"(<x>)\"\n"; writeFile(tmpdir, "t.stg", templates); TemplateGroup group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.Debug = true; DebugTemplate st = (DebugTemplate)group.GetInstanceOf("method"); st.impl.Dump(); st.Add("type", "float"); st.Add("name", "foo"); st.Add("locals", 3); st.Add("args", new String[] { "x", "y", "z" }); Template s1 = group.GetInstanceOf("assign"); Template paren = group.GetInstanceOf("paren"); paren.Add("x", "x"); s1.Add("a", paren); s1.Add("b", "y"); Template s2 = group.GetInstanceOf("assign"); s2.Add("a", "y"); s2.Add("b", "z"); Template s3 = group.GetInstanceOf("return"); s3.Add("x", "3.14159"); st.Add("stats", s1); st.Add("stats", s2); st.Add("stats", s3); st.Visualize(); }
protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e) { if (e.Property == DataContextProperty) { var viewModel = ViewModel; if (viewModel == null) { return; } currentTemplate = viewModel.Visualizer.RootTemplate; OutputTextBox.Document = new FlowDocument(new Paragraph(new Run(viewModel.Output) { FontFamily = new FontFamily("Consolas") })); UpdateCurrentTemplate(); } base.OnPropertyChanged(e); }
public void VisualizerTestShadowTemplates() { string templates = "list(lines) ::= <<\n" + "<lines:line(); separator=\"\\n\">\n" + ">>\n" + "line(text) ::= \"<text>\"\n"; writeFile(tmpdir, "t.stg", templates); TemplateGroup group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.Debug = true; DebugTemplate template = (DebugTemplate)group.GetInstanceOf("list"); DebugTemplate line = (DebugTemplate)group.GetInstanceOf("line"); line.Add("text", "x = 3"); template.Add("lines", line); template.Add("lines", line); template.Add("lines", line); template.Visualize(); }
public void TestTemplateCall() { string templates = "t(x) ::= <<[<u()>]>>\n" + "u() ::= << <x> >>\n"; writeFile(tmpdir, "t.stg", templates); TemplateGroup group = new TemplateGroupFile(Path.Combine(tmpdir, "t.stg")); group.Debug = true; DebugTemplate st = (DebugTemplate)group.GetInstanceOf("t"); List <InterpEvent> events = st.GetEvents(); string expected = "[EvalExprEvent{self=t(x), output=[0..1), expr=[}," + " EvalExprEvent{self=u(), output=[1..1), expr=<x>}," + " EvalExprEvent{self=u(), output=[1..2), expr= }," + " EvalTemplateEvent{self=u(), output=[1..2)}," + " EvalExprEvent{self=t(x), output=[1..2), expr=<u()>}," + " EvalExprEvent{self=t(x), output=[2..3), expr=]}," + " EvalTemplateEvent{self=t(x), output=[0..3)}]"; string result = events.ToListString(); Assert.AreEqual(expected, result); }
public static void Visualize(this DebugTemplate template, CultureInfo culture) { Visualize(template, template.impl.NativeGroup.ErrorManager, culture, AutoIndentWriter.NoWrap); }
public static void Visualize(this DebugTemplate template, int lineWidth) { Visualize(template, template.impl.NativeGroup.ErrorManager, CultureInfo.CurrentCulture, lineWidth); }
public static void Visualize(this DebugTemplate template) { Visualize(template, CultureInfo.CurrentCulture); }