#java #import #package #antlr4
Вопрос:
У меня есть грамматика antlr4, которую я хочу вызвать функцией, в которой другой класс Java в семантическом предикате. Как мне сказать antlr4, чтобы он добавил соответствующий оператор импорта в класс, чтобы он мог найти класс, который я хочу использовать?
Вот фрагмент кода antlr4, показывающий предикат, использующий класс, как я хочу. Обратите внимание на вызов класса Other в семантическом предикате.
somerule : { OtherClass.test(_input.LT(1).getText()) }? Token
Как мне сказать antlr4, чтобы он добавил следующую инструкцию импорта в верхнюю часть сгенерированного синтаксического анализатора?
import my.otherpackage.OtherClass;
Я полагаю, что мог бы добавить в каталог, в который antlr4 записывает сгенерированный синтаксический анализатор, класс «переадресации», подобный этому, но это кажется взломом
package GeneratedParser;
import my.otherpackage.OtherClass;
class OtherClassForParser {
public Boolean test(String text) {
return OtherClass.test(text);
}
}
Затем в antlr4 перепишите его для использования
somerule : { OtherClassForParser.test(_input.LT(1).getText()) }? Token
Это, вероятно, сработает, потому что класс пересылки будет находиться в том же пакете.
Ответ №1:
Попробуй:
@parser::header{
import my.otherpackage.OtherClass;
}
(Обычно ближе к началу вашей грамматики)
Комментарии:
1. Работал отлично (как только я перестал делать опечатки). Спасибо.