Как добавить оператор импорта в созданный anltr4 синтаксический анализатор java для использования класса в семантическом предикате

#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. Работал отлично (как только я перестал делать опечатки). Спасибо.