How to automatically generate lexer+parser with ANTLR4 and Maven?
Solution 1
I created the following Gist with a pom.xml
designed solely for supporting automatic code generation from ANTLR 4 grammars during an Eclipse build. It includes the necessary lifecycle information for m2e to know that the code generation is necessary, and explicitly adds the code generation folder using the build-helper-maven-plugin
since Eclipse seemed to have some trouble locating it otherwise.
In this configuration, grammar files (*.g4
) are placed alongside the other Java source files. The Maven plugin will automatically add the proper package ...
statement to the generated files, so you shouldn't include a @header{package ...}
line in the grammar itself.
https://gist.github.com/sharwell/4979017
Solution 2
Check out this Antlr4 plugin for Eclipse
https://github.com/jknack/antlr4ide
Related videos on Youtube
Vertex
Updated on September 14, 2022Comments
-
Vertex over 1 year
I'am new to ANTLR4, and it seems that there is no Eclipse-Plug-In for v4. So it would nice to build automatically the Java sources from the .g4 grammars. I have a simple, empty Maven-project with src/main/java, src/test/java. Where to place the .g4 files? How can I automatically build the grammars with Maven?
My own POM-test failed:
<repository> <id>mvn-public</id> <name>MVNRepository</name> <url>http://mvnrepository.com</url> </repository> ... <build> <plugins> <plugin> <groupId>org.antlr</groupId> <artifactId>antlr4-maven-plugin</artifactId> <version>4.0.0</version> <executions> <execution> <goals> <goal>antlr</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
Eclipse says:
Failure to find org.antlr:antlr4-maven-plugin:pom:4.0.0 in http://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced
-
Vertex about 11 yearsThank you! When I comment the build-helper-maven-plugin out in pom.xml, ANTLR builds the lexer and parser for the placed grammar. But with build-helper-maven-plugin Eclipse says: "Plugin execution not covered by lifecycle configuration: org.codehaus.mojo:build-helper-maven-plugin:1.7:add-source (execution: default, phase: generate-sources)". Without manually adding target/generatet-sources/antlr4 as a src-folder, I can't use the generated lexer/parser. And another question: How to put arguments?
<onfiguration><arguments><package>org.example</package></arguments></configuration>
doesn't work. -
Sam Harwell about 11 yearsEclipse will automatically download the proper extension to work with the build helper plugin if you tell it to. The package clause is always added automatically by the antlr4 goal based on the location of the .g4 file within your source structure. To change the package of the generated code, move the grammar itself to the desired package in the source tree.
-
Jeffrey Guenther over 10 yearsDo you have a NetBeans version?
-
Sam Harwell over 10 years@JeffreyGuenther NetBeans works great with "plain" Maven configurations, so the biggest change is to simply strip out the Eclipse-specific stuff. gist.github.com/sharwell/6214103
-
Adrian Panasiuk over 10 yearsMay I add that it's worth typing
<execute><runOnIncremental>true</runOnIncremental></execute>
where the gist just says<execute></execute>
, so that the generated code is refreshed everytime the grammar source is updated? -
Sam Harwell over 10 years@AdrianPanasiuk Thanks, I did.
-
Benjamin Spiegel almost 3 years@Vertex to add arguments, place the configuration tag directly in the
<plugin></plugin>
tag:<plugin>...<configuration><arguments></arguments></configuration>...</plugin>