public static void Main(string[] args) { ICharStream input = new ANTLRFileStream(args[0]); SpicaMLLexer lex = new SpicaMLLexer(input); CommonTokenStream tokens = new CommonTokenStream(lex); SpicaMLParser parser = new SpicaMLParser(tokens); SpicaMLParser.model_return r = parser.model(); ITree t = (ITree)r.Tree; // Console.Out.WriteLine(t.ToStringTree()); DOTTreeGenerator gen = new DOTTreeGenerator(); StringTemplate st = gen.ToDOT(t); Console.Out.WriteLine(st); }
public IList<Element> Parse(string input) { this.input = input; ICharStream instr = new ANTLRFileStream(input); SpicaMLLexer lex = new SpicaMLLexer(instr); CommonTokenStream tokens = new CommonTokenStream(lex); SpicaMLParser parser = new SpicaMLParserReportError(tokens); this.ns = new List<string>(); this.elements = new List<Element>(); try { DateTime parse_start = DateTime.UtcNow; SpicaMLParser.model_return r = parser.model(); DateTime parse_stop = DateTime.UtcNow; this.time_parse += ((parse_stop - parse_start).Ticks / 10000); this.tree = r.Tree as ITree; if (this.tree == null) { Console.Error.WriteLine("SpicaML: Error parsing input!"); return null; } DateTime process_start = DateTime.UtcNow; GetNamespace(this.tree); ProcessTree(this.tree, input); DateTime process_stop = DateTime.UtcNow; this.time_process += ((process_stop - process_start).Ticks / 10000); // Resolve only structures and modules; // enums are primitive by definition DateTime resolve_start = DateTime.UtcNow; foreach (Element e in this.elements) { if ((!(e is Structure)) && (!(e is Module))) { continue; } e.Resolve(this.elements); } DateTime resolve_stop = DateTime.UtcNow; this.time_resolve += ((resolve_stop - resolve_start).Ticks / 10000); } catch (RecognitionException re) { Console.Out.WriteLine(re.StackTrace); } int nenums = 0; int nstructs = 0; int nmodules = 0; foreach (Element e in this.elements) { if (e is Enum) { nenums++; } else if (e is Structure) { nstructs++; } else if (e is Module) { nmodules++; } } Trace.WriteLine("Extracted {0} enums, {1} structures, and {2} modules in {3} ms", nenums, nstructs, nmodules, this.time_parse + this.time_process + this.time_resolve); return this.elements; }