Example #1
0
 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);
 }
Example #2
0
        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;
        }