2016-12-06 4 views
3

Я создал файл MyLexer.g4 внутри myproject/src/main/antlr/com/mypackage как:Gradle не может найти файл маркера Antlr

lexer grammar MyLexer; 

DIGIT : '0' .. '9' ; 

...

WS : [ \t\r\n]+ -> skip ; 

, а затем пытается написать парсер в MyParser.g4 в том же каталоге:

grammar MyParser; 

options 
    { tokenVocab = MyLexer; } 

SHORT_YEAR: DIGIT DIGIT; 

К сожалению, когда я выполняю задачу градиента generateGrammarSource, возникает следующая ошибка:

error(160): com\mypackage\MyParser.g4:4:18: cannot find tokens file MYPROJECT\build\generated-src\antlr\main\MyLexer.tokens 

I.e. файл запрашивается в неправильном месте.

Фактический файл создается внутри MYPROJECT\build\generated-src\antlr\main\com\mypackage\MyLexer.tokens

+0

Вы нашли решение этой проблемы? –

ответ

0

При создании ваш парсер в пакете с помощью:

@header {package org.acme.my.package;}

и объявляющий tokenVocab в вашем парсер

options {tokenVocab = MyLanguage;}

Файлы MyLanguageLexer.g4 и MyLanguageParser.g4 НЕ должны находиться в каталоге пакетов. из-за ошибки.

Значит, это означает /src/main/antlr/MyLanguageParser.g4, а не /src/main/antlr/com/acme/my/package/MyLanguageParser.g4.

Файлы java попадают в неправильный каталог в build/generated-src/antlr, но каким-то образом превращаются в правильный каталог в build/classes/java/main. И файл .tokens заканчивается там, где ожидает antlr.


Имейте в виду, что это смущает вашу среду IDE; Мне пришлось добавить скомпилированные классы обратно в мой compileClasspath, чтобы избежать проблем с визуальным классом.

dependencies { 
    testCompile fileTree('build/classes/java/main') 
} 
Смежные вопросы