Beispiel #1
0
        public LexerATNFactory(LexerGrammar g)
            : base(g)
        {
            // use codegen to get correct language templates for lexer commands
            string         language = g.GetOptionString("language");
            CodeGenerator  gen      = new CodeGenerator(g.tool, null, language);
            AbstractTarget target   = gen.GetTarget();

            codegenTemplates = target != null?target.GetTemplates() : null;
        }
Beispiel #2
0
        /** From T.g return a list of File objects that
         *  name files ANTLR will emit from T.g.
         */
        public virtual IList <string> GetGeneratedFileList()
        {
            AbstractTarget target = generator.GetTarget();

            if (target == null)
            {
                // if the target could not be loaded, no code will be generated.
                return(new List <string>());
            }

            IList <string> files = new List <string>();

            // add generated recognizer; e.g., TParser.java
            if (generator.GetTarget().NeedsHeader())
            {
                files.Add(GetOutputFile(generator.GetRecognizerFileName(true)));
            }
            files.Add(GetOutputFile(generator.GetRecognizerFileName(false)));
            // add output vocab file; e.g., T.tokens. This is always generated to
            // the base output directory, which will be just . if there is no -o option
            //
            files.Add(GetOutputFile(generator.GetVocabFileName()));
            // are we generating a .h file?
            Template headerExtST = null;
            Template extST       = target.GetTemplates().GetInstanceOf("codeFileExtension");

            if (target.GetTemplates().IsDefined("headerFile"))
            {
                headerExtST = target.GetTemplates().GetInstanceOf("headerFileExtension");
                string suffix   = Grammar.GetGrammarTypeToFileNameSuffix(g.Type);
                string fileName = g.name + suffix + headerExtST.Render();
                files.Add(GetOutputFile(fileName));
            }
            if (g.IsCombined())
            {
                // add autogenerated lexer; e.g., TLexer.java TLexer.h TLexer.tokens

                string suffix = Grammar.GetGrammarTypeToFileNameSuffix(ANTLRParser.LEXER);
                string lexer  = g.name + suffix + extST.Render();
                files.Add(GetOutputFile(lexer));
                string lexerTokens = g.name + suffix + CodeGenerator.VOCAB_FILE_EXTENSION;
                files.Add(GetOutputFile(lexerTokens));

                // TLexer.h
                if (headerExtST != null)
                {
                    string header = g.name + suffix + headerExtST.Render();
                    files.Add(GetOutputFile(header));
                }
            }

            if (g.tool.gen_listener)
            {
                // add generated listener; e.g., TListener.java
                if (generator.GetTarget().NeedsHeader())
                {
                    files.Add(GetOutputFile(generator.GetListenerFileName(true)));
                }
                files.Add(GetOutputFile(generator.GetListenerFileName(false)));

                // add generated base listener; e.g., TBaseListener.java
                if (generator.GetTarget().NeedsHeader())
                {
                    files.Add(GetOutputFile(generator.GetBaseListenerFileName(true)));
                }
                files.Add(GetOutputFile(generator.GetBaseListenerFileName(false)));
            }

            if (g.tool.gen_visitor)
            {
                // add generated visitor; e.g., TVisitor.java
                if (generator.GetTarget().NeedsHeader())
                {
                    files.Add(GetOutputFile(generator.GetVisitorFileName(true)));
                }
                files.Add(GetOutputFile(generator.GetVisitorFileName(false)));

                // add generated base visitor; e.g., TBaseVisitor.java
                if (generator.GetTarget().NeedsHeader())
                {
                    files.Add(GetOutputFile(generator.GetBaseVisitorFileName(true)));
                }
                files.Add(GetOutputFile(generator.GetBaseVisitorFileName(false)));
            }


            // handle generated files for imported grammars
            IList <Grammar> imports = g.GetAllImportedGrammars();

            if (imports != null)
            {
                foreach (Grammar g in imports)
                {
                    //string outputDir = tool.GetOutputDirectory(g.fileName);
                    //string fname = GroomQualifiedFileName(outputDir, g.GetRecognizerName() + extST.Render());
                    //files.Add(Path.Combine(outputDir, fname));
                    files.Add(GetOutputFile(g.fileName));
                }
            }

            if (files.Count == 0)
            {
                return(null);
            }
            return(files);
        }