Как создать файл токена из файла грамматики в antlr

Я создаю 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)? Этот файл пуст в моем проекте. Как я могу создать этот файл?

1 ответ

У вас есть что-то подобное в вашей древовидной грамматике?

options
{
  tokenVocab=layout; //NOT layout.g or layout.tokens
  ASTLabelType=pANTLR3_BASE_TREE;
}
Другие вопросы по тегам