public JavaParserDetails(Workspaces.Document item) : base(item) { // Passes executed in order for all files. Passes.Add(() => { // Gather Imports from grammars. // Gather _dependent_grammars map. ParseTreeWalker.Default.Walk(new Pass3Listener(this), ParseTree); return(false); }); Passes.Add(() => { // For all imported grammars across the entire universe, // make sure all are loaded in the workspace, // then restart. foreach (KeyValuePair <string, List <string> > dep in _dependent_grammars) { var name = dep.Key; var x = Workspaces.Workspace.Instance.FindDocument(name); if (x == null) { // Add document. var proj = this.Item.Parent; var new_doc = new Workspaces.Document(name, name); proj.AddChild(new_doc); return(true); } foreach (var y in dep.Value) { var z = Workspaces.Workspace.Instance.FindDocument(y); if (z == null) { // Add document. var proj = this.Item.Parent; var new_doc = new Workspaces.Document(y, y); proj.AddChild(new_doc); return(true); } } } // The workspace is completely loaded. Create scopes for all files in workspace // if they don't already exist. foreach (KeyValuePair <string, List <string> > dep in _dependent_grammars) { var name = dep.Key; _scopes.TryGetValue(name, out IScope file_scope); if (file_scope != null) { continue; } _scopes[name] = new FileScope(name, null); } // Set up search path scopes for Imports relationship. var root = _scopes[this.FullFileName]; foreach (var dep in this.Imports) { var import = new SearchPathScope(root); _scopes.TryGetValue(dep, out IScope dep_scope); if (dep_scope == null) { _scopes[dep] = new FileScope(dep, null); } dep_scope = _scopes[dep]; import.nest(dep_scope); root.nest(import); } root.empty(); this.RootScope = root; return(false); }); Passes.Add(() => { ParseTreeWalker.Default.Walk(new Pass1Listener(this), ParseTree); return(false); }); Passes.Add(() => { ParseTreeWalker.Default.Walk(new Pass2Listener(this), ParseTree); return(false); }); }
public W3CebnfParsingResults(Document item) : base(item) { Passes.Add(() => { int before_count = 0; if (!ParsingResults.InverseImports.ContainsKey(this.FullFileName)) { ParsingResults.InverseImports.Add(this.FullFileName, new HashSet <string>()); } foreach (KeyValuePair <string, HashSet <string> > x in ParsingResults.InverseImports) { before_count++; before_count = before_count + x.Value.Count; } if (ParseTree == null) { return(false); } int after_count = 0; foreach (KeyValuePair <string, HashSet <string> > dep in ParsingResults.InverseImports) { string name = dep.Key; Workspaces.Document x = item.Workspace.FindDocument(name); if (x == null) { // Add document. Workspaces.Container proj = Item.Parent; Workspaces.Document new_doc = new Workspaces.Document(name); proj.AddChild(new_doc); after_count++; } after_count++; after_count = after_count + dep.Value.Count; } return(before_count != after_count); }); Passes.Add(() => { // The workspace is completely loaded. Create scopes for all files in workspace // if they don't already exist. foreach (KeyValuePair <string, HashSet <string> > dep in InverseImports) { string name = dep.Key; _scopes.TryGetValue(name, out IScope file_scope); if (file_scope != null) { continue; } _scopes[name] = new FileScope(name, null); } // Set up search path scopes for Imports relationship. IScope root = _scopes[FullFileName]; foreach (string dep in Imports) { // Don't add if already have this search path. IScope dep_scope = _scopes[dep]; bool found = false; foreach (IScope scope in root.NestedScopes) { if (scope is SearchPathScope) { SearchPathScope spc = scope as SearchPathScope; if (spc.NestedScopes.First() == dep_scope) { found = true; break; } } } if (!found) { SearchPathScope import = new SearchPathScope(root); import.nest(dep_scope); root.nest(import); } } root.empty(); RootScope = root; return(false); }); Passes.Add(() => { if (ParseTree == null) { return(false); } ParseTreeWalker.Default.Walk(new Pass2Listener(this), ParseTree); return(false); }); Passes.Add(() => { if (ParseTree == null) { return(false); } ParseTreeWalker.Default.Walk(new Pass3Listener(this), ParseTree); return(false); }); }
public AntlrGrammarDetails(Workspaces.Document item) : base(item) { // Passes executed in order for all files. Passes.Add(() => { // Gather Imports from grammars. // Gather _dependent_grammars map. int before_count = 0; foreach (KeyValuePair <string, List <string> > x in AntlrGrammarDetails._dependent_grammars) { before_count++; before_count = before_count + x.Value.Count; } ParseTreeWalker.Default.Walk(new Pass3Listener(this), ParseTree); int after_count = 0; foreach (KeyValuePair <string, List <string> > dep in AntlrGrammarDetails._dependent_grammars) { string name = dep.Key; Workspaces.Document x = Workspaces.Workspace.Instance.FindDocument(name); if (x == null) { // Add document. Workspaces.Container proj = Item.Parent; Workspaces.Document new_doc = new Workspaces.Document(name); proj.AddChild(new_doc); after_count++; } after_count++; after_count = after_count + dep.Value.Count; } return(before_count != after_count); }); Passes.Add(() => { // For all imported grammars across the entire universe, // make sure all are loaded in the workspace, // then restart. foreach (KeyValuePair <string, List <string> > dep in AntlrGrammarDetails._dependent_grammars) { string name = dep.Key; Workspaces.Document x = Workspaces.Workspace.Instance.FindDocument(name); if (x == null) { // Add document. Workspaces.Container proj = Item.Parent; Workspaces.Document new_doc = new Workspaces.Document(name); proj.AddChild(new_doc); return(true); } foreach (string y in dep.Value) { Workspaces.Document z = Workspaces.Workspace.Instance.FindDocument(y); if (z == null) { // Add document. Workspaces.Container proj = Item.Parent; Workspaces.Document new_doc = new Workspaces.Document(y); proj.AddChild(new_doc); return(true); } } } // The workspace is completely loaded. Create scopes for all files in workspace // if they don't already exist. foreach (KeyValuePair <string, List <string> > dep in _dependent_grammars) { string name = dep.Key; _scopes.TryGetValue(name, out IScope file_scope); if (file_scope != null) { continue; } _scopes[name] = new FileScope(name, null); } // Set up search path scopes for Imports relationship. IScope root = _scopes[FullFileName]; foreach (string dep in Imports) { // Don't add if already have this search path. IScope dep_scope = _scopes[dep]; bool found = false; foreach (IScope scope in root.NestedScopes) { if (scope is SearchPathScope) { SearchPathScope spc = scope as SearchPathScope; if (spc.NestedScopes.First() == dep_scope) { found = true; break; } } } if (!found) { SearchPathScope import = new SearchPathScope(root); import.nest(dep_scope); root.nest(import); } } root.empty(); RootScope = root; return(false); }); Passes.Add(() => { ParseTreeWalker.Default.Walk(new Pass1Listener(this), ParseTree); return(false); }); Passes.Add(() => { ParseTreeWalker.Default.Walk(new Pass2Listener(this), ParseTree); return(false); }); }