Я создаю DSL, используя antlr.Lexer и Parser записаны в одном файле грамматики (скажем, layout.g).Древовидная грамматика записывается в другом файле грамматики (скажем, layoutTree.g).Теперь синтаксический анализатор дерева неправильно обрабатывает.Я напечатал вывод AST из парсера, и это правильно.Я просмотрел сгенерированный код синтаксического анализатора дерева и обнаружил, что объявления значений токенов назначают разные значения в синтаксическом анализаторе дерева и анализаторе. Ниже приведен пример выходных данных синтаксического анализатора и синтаксического анализатора дерева.
Выход анализатора
public static final int ARRAY_MEMBER_TOKEN=4;
public static final int ARRAY_TOKEN=5;
public static final int DECLARATION_TOKEN=6;
Выход синтаксического анализатора дерева
public static final int EOF=-1;
public static final int DECLARATION_TOKEN=4;
public static final int IDENTIFIER=5;
Как видно, DECLARATION_TOKEN имеет разные значения в выходных данных синтаксического анализатора ивывод парсера дерева.Из-за этого дерева синтаксический анализатор не работает, как ожидалось. Как я могу исправить эту проблему?
Это проблема с сгенерированным файлом токена (скажем, layout.token)?Этот файл пуст в моем проекте. Как я могу сгенерировать этот файл?