Как создать файл токена из файла грамматики в 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;
}