private void MenuItemCallback(object sender, EventArgs e) { ThreadHelper.ThrowIfNotOnUIThread(); try { //////////////////////// /// Eliminate left recursion. //////////////////////// if (!(((IServiceProvider)ServiceProvider).GetService(typeof(VsTextManagerClass)) is IVsTextManager manager)) { return; } manager.GetActiveView(1, null, out IVsTextView view); if (view == null) { return; } view.GetCaretPos(out int l, out int c); view.GetSelection(out int ls, out int cs, out int le, out int ce); view.GetBuffer(out IVsTextLines buf); if (buf == null) { return; } ITextBuffer buffer = AntlrLanguageClient.AdaptersFactory.GetWpfTextView(view)?.TextBuffer; string ffn = buffer?.GetFFN(); if (ffn == null) { return; } Workspaces.Document document = Workspaces.Workspace.Instance.FindDocument(ffn); if (document == null) { return; } int start = new LanguageServer.Module().GetIndex(ls, cs, document); int end = new LanguageServer.Module().GetIndex(le, ce, document); AntlrLanguageClient.CMEliminateIndirectLeftRecursion(ffn, start, end); } catch (Exception exception) { Logger.Log.Notify(exception.StackTrace); } }
private void MenuItemCallback(object sender, EventArgs e) { try { //////////////////////// /// Replace multiple rules that priorize operators with one rule and multiple ordered alts. //////////////////////// IVsTextManager manager = ((IServiceProvider)ServiceProvider).GetService(typeof(VsTextManagerClass)) as IVsTextManager; if (manager == null) { return; } manager.GetActiveView(1, null, out IVsTextView view); if (view == null) { return; } view.GetCaretPos(out int l, out int c); view.GetSelection(out int ls, out int cs, out int le, out int ce); view.GetBuffer(out IVsTextLines buf); if (buf == null) { return; } ITextBuffer buffer = AntlrLanguageClient.AdaptersFactory.GetWpfTextView(view)?.TextBuffer; string ffn = buffer.GetFFN(); if (ffn == null) { return; } Workspaces.Document document = Workspaces.Workspace.Instance.FindDocument(ffn); if (document == null) { return; } int start = new LanguageServer.Module().GetIndex(ls, cs, document); int end = new LanguageServer.Module().GetIndex(le, ce, document); AntlrLanguageClient.CMReplacePriorization(ffn, start, end); } catch (Exception exception) { Logger.Log.Notify(exception.StackTrace); } }
private void MenuItemCallback(object sender, EventArgs e) { try { //////////////////////// /// Unfold (substitute RHS of a rule into uses of the LHS symbol). //////////////////////// if (!(((IServiceProvider)ServiceProvider).GetService(typeof(VsTextManagerClass)) is IVsTextManager manager)) { return; } manager.GetActiveView(1, null, out IVsTextView view); if (view == null) { return; } view.GetCaretPos(out int l, out int c); view.GetSelection(out int ls, out int cs, out int le, out int ce); view.GetBuffer(out IVsTextLines buf); if (buf == null) { return; } ITextBuffer buffer = AntlrLanguageClient.AdaptersFactory.GetWpfTextView(view).TextBuffer; string ffn = buffer.GetFFN(); if (ffn == null) { return; } Workspaces.Document document = Workspaces.Workspace.Instance.FindDocument(ffn); if (document == null) { return; } int start = new LanguageServer.Module().GetIndex(ls, cs, document); int end = new LanguageServer.Module().GetIndex(le, ce, document); AntlrLanguageClient.CMUnfold(ffn, start, end); } catch (Exception exception) { Logger.Log.Notify(exception.StackTrace); } }
private void MenuItemCallback(object sender, EventArgs e) { try { //////////////////////// /// Remove useless parser productions. //////////////////////// IVsTextManager manager = ((IServiceProvider)ServiceProvider).GetService(typeof(VsTextManagerClass)) as IVsTextManager; if (manager == null) { return; } manager.GetActiveView(1, null, out IVsTextView view); if (view == null) { return; } view.GetCaretPos(out int l, out int c); view.GetBuffer(out IVsTextLines buf); if (buf == null) { return; } ITextBuffer buffer = AntlrLanguageClient.AdaptersFactory.GetWpfTextView(view)?.TextBuffer; string ffn = buffer.GetFFN(); if (ffn == null) { return; } Workspaces.Document document = Workspaces.Workspace.Instance.FindDocument(ffn); if (document == null) { return; } int pos = new LanguageServer.Module().GetIndex(l, c, document); AntlrLanguageClient.CMMoveStartRuleToTop(ffn); } catch (Exception exception) { Logger.Log.Notify(exception.StackTrace); } }
public void Execute(Repl repl, ReplParser.TextContext tree, bool piped) { var args = tree.arg(); var arg = args?.GetText(); var line_number = (arg == "line-number"); var lines = repl.input_output_stack.Pop(); var serializeOptions = new JsonSerializerOptions(); serializeOptions.Converters.Add(new AntlrJson.ParseTreeConverter()); serializeOptions.WriteIndented = false; var obj1 = JsonSerializer.Deserialize <AntlrJson.ParsingResultSet>(lines, serializeOptions); var nodes = obj1.Nodes; var parser = obj1.Parser; var lexer = obj1.Lexer; var fn = obj1.FileName; Document doc = null; if (!(fn == null || fn == "stdin")) { doc = repl._docs.ReadDoc(fn); } foreach (var node in nodes) { if (line_number && doc != null) { var source_interval = node.SourceInterval; int a = source_interval.a; int b = source_interval.b; IToken ta = parser.TokenStream.Get(a); IToken tb = parser.TokenStream.Get(b); var start = ta.StartIndex; var stop = tb.StopIndex + 1; var(line_a, col_a) = new LanguageServer.Module().GetLineColumn(start, doc); var(line_b, col_b) = new LanguageServer.Module().GetLineColumn(stop, doc); System.Console.Write(System.IO.Path.GetFileName(doc.FullPath) + ":" + line_a + "," + col_a + "-" + line_b + "," + col_b + "\t"); } System.Console.WriteLine(this.Reconstruct(node)); } }
private void MenuItemCallback(object sender, EventArgs e) { try { //////////////////////// /// Eliminate Antlr keywords mistakenly used as non-terminal names! //////////////////////// if (!(((IServiceProvider)ServiceProvider).GetService(typeof(VsTextManagerClass)) is IVsTextManager manager)) { return; } manager.GetActiveView(1, null, out IVsTextView view); if (view == null) { return; } view.GetCaretPos(out int l, out int c); view.GetBuffer(out IVsTextLines buf); if (buf == null) { return; } ITextBuffer buffer = AntlrLanguageClient.AdaptersFactory.GetWpfTextView(view)?.TextBuffer; string ffn = buffer?.GetFFN(); if (ffn == null) { return; } Workspaces.Document document = Workspaces.Workspace.Instance.FindDocument(ffn); if (document == null) { return; } int pos = new LanguageServer.Module().GetIndex(l, c, document); AntlrLanguageClient.CMEliminateAntlrKeywordsInRules(ffn); } catch (Exception exception) { Logger.Log.Notify(exception.StackTrace); } }
public IEnumerable <Info> Get(Document doc) { try { ParsingResults pd = ParsingResultsFactory.Create(doc); var workspace = doc.Workspace; if (pd.ParseTree == null) { Compile(workspace); } List <Info> combined = new List <Info>(); foreach (KeyValuePair <Antlr4.Runtime.IToken, int> p in pd.ColorizedList) { if (p.Key == null) { continue; } var sym = p.Key; var st = sym.StartIndex; var en = sym.StopIndex + 1; int s1 = st; int s2 = en; // Create multiple "info" for multiline tokens. var(ls, cs) = new LanguageServer.Module().GetLineColumn(st, doc); var(le, ce) = new LanguageServer.Module().GetLineColumn(en, doc); if (ls == le) { combined.Add( new Info() { start = s1, end = s2 - 1, kind = p.Value }); } else { var text = sym.Text; int start_region = st; for (int cur_index = 0; cur_index < text.Length;) { if (text[cur_index] == '\n' || text[cur_index] == '\r') { // Emit Info(). if (text[cur_index] == '\r' && (cur_index + 1 < text.Length) && text[cur_index + 1] == '\n') { cur_index++; } cur_index++; combined.Add( new Info() { start = start_region, end = st + cur_index - 1, kind = p.Value }); start_region = st + cur_index; } else { cur_index++; } } if (start_region != en) { combined.Add( new Info() { start = start_region, end = en - 1, kind = p.Value }); } } } // Sort the list. IOrderedEnumerable <Info> sorted_combined_tokens = combined.OrderBy(t => t.start).ThenBy(t => t.end); return(sorted_combined_tokens); } catch (Exception) { } return(new List <Info>()); }
private void MenuItemCallback(bool split) { ThreadHelper.ThrowIfNotOnUIThread(); try { //////////////////////// /// Reorder parser productions. //////////////////////// if (!(((IServiceProvider)ServiceProvider).GetService(typeof(VsTextManagerClass)) is IVsTextManager manager)) { return; } manager.GetActiveView(1, null, out IVsTextView view); if (view == null) { return; } view.GetCaretPos(out int l, out int c); view.GetBuffer(out IVsTextLines buf); if (buf == null) { return; } ITextBuffer buffer = AntlrLanguageClient.AdaptersFactory.GetWpfTextView(view)?.TextBuffer; string ffn = buffer.GetFFN(); if (ffn == null) { return; } Workspaces.Document document = Workspaces.Workspace.Instance.FindDocument(ffn); if (document == null) { return; } int pos = new LanguageServer.Module().GetIndex(l, c, document); Dictionary <string, string> changes = AntlrLanguageClient.CMSplitCombineGrammars(ffn, split); EnvDTE.Project project = null; string the_namespace = ""; for (; ;) { string current_grammar_ffn = ffn; (EnvDTE.Project, EnvDTE.ProjectItem)p_f_original_grammar = LspAntlr.MakeChanges.FindProjectAndItem(current_grammar_ffn); project = p_f_original_grammar.Item1; try { object prop = p_f_original_grammar.Item2.Properties.Item("CustomToolNamespace").Value; the_namespace = prop.ToString(); } catch (Exception) { } break; } if (project == null) { EnvDTE.DTE dte = (EnvDTE.DTE)Package.GetGlobalService(typeof(EnvDTE.DTE)); EnvDTE.Projects projects = dte.Solution.Projects; project = projects.Item(EnvDTE.Constants.vsMiscFilesProjectUniqueName); } if (changes == null) { return; } MakeChanges.EnterChanges(changes, project, the_namespace); } catch (Exception exception) { Logger.Log.Notify(exception.StackTrace); } }