internal static CrawlSyntaxTree ParseTree(CrawlParser.Translation_unitContext context, string name)
        {
            TranslationUnitNode node = ParseTreeParser.ParseTranslationUnit(context);

            node.OwningTree.CompilationUnitName = name;

            return(node.OwningTree);
        }
        public static CrawlSyntaxTree ReadFile(string filename)
        {
            ICharStream  charStream  = new AntlrFileStream(filename, Encoding.UTF8);
            CrawlLexer   tokenSource = new CrawlLexer(charStream);
            ITokenStream tokenStream = new CommonTokenStream(tokenSource);
            CrawlParser  parser      = new CrawlParser(tokenStream);


            //The translation_unit is the top rule in our grammar.
            //Asking the parser to match that from the token stream leaves us at the top of the parse tree.
            CrawlParser.Translation_unitContext rootContext = parser.translation_unit();


            TranslationUnitNode node = ParseTreeParser.ParseTranslationUnit(rootContext);

            node.OwningTree.CompilationUnitName = filename;

            return(node.OwningTree);
        }