Search code examples
javaantlr

How to specify a target package for ANTLR?


If I call:

java org.antlr.Tool -o outdir sources/com/example/Java5.g

...with antlr-3.1.3 the parser and lexer code will be generated in the directory outdir/sources/com/example. But the generated classes don't have any package statement. I need them to life in the package com.example.

Is there a way to specify the target package?


Solution

  • ANTLR provides a header tool which allows you to include package and imports. You include this in your *.g grammar file:

    @header {
        package org.xmlcml.cml.converters.antlr;
        import java.util.HashMap;
    }
    

    And you may need it in the Lexer as well:

    @lexer::header {package org.xmlcml.cml.converters.antlr;}
    

    and in case you need to add some members and code:

    @members {
        HashMap<String, Object> objectMap = new HashMap<String, Object>();
        //...
    
        private void addArrayValue(String content) {
        //... code required by snippets in the grammar
    
        }
    }