Как создать файл токена из файла грамматики в antlr - PullRequest
0 голосов
/ 25 июля 2011

Я создаю 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 Ответ

0 голосов
/ 26 июля 2011

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

options
{
  tokenVocab=layout; //NOT layout.g or layout.tokens
  ASTLabelType=pANTLR3_BASE_TREE;
}
...