Как автоматически генерировать парсер lexer + с ANTLR4 и Maven? - программирование
Подтвердить что ты не робот

Как автоматически генерировать парсер lexer + с ANTLR4 и Maven?

Я новичок в ANTLR4, и кажется, что нет Eclipse-Plug-In для v4. Поэтому неплохо было бы автоматически создавать источники Java из грамматик .g4. У меня простой, пустой Maven-проект с src/main/java, src/test/java. Где разместить файлы .g4? Как я могу автоматически строить грамматики с помощью Maven?

Не удалось выполнить мой собственный POM-тест:

<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 говорит:

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
4b9b3361

Ответ 1

Я создал следующий Gist с pom.xml, разработанный исключительно для поддержки автоматического генерации кода из ANTLR 4 грамматик во время сборки Eclipse. Он включает в себя необходимую информацию о жизненном цикле для m2e, чтобы знать, что генерация кода необходима, и явно добавляет папку генерации кода с помощью build-helper-maven-plugin, поскольку Eclipse, похоже, обнаружил некоторые проблемы с поиском в противном случае.

В этой конфигурации файлы грамматики (*.g4) помещаются рядом с другими исходными файлами Java. Плагин Maven автоматически добавит правильный оператор package ... к сгенерированным файлам, поэтому вы не должны включать строку @header{package ...} в самой грамматике.

https://gist.github.com/sharwell/4979017