Получите доступ к двум или более токенам в одной строке, используя Bison - PullRequest
1 голос
/ 16 октября 2011

Я использую Bison для реализации простого парсера.И одна строка синтаксиса выглядит так:

prefix_definition : PREFIX IDENTIFIER IDENTIFIER ABBR IDENTIFIER ';'

Я не уверен, как получить 1-й, 2-й и 3-й IDENTIFIER отдельно.Мой гибкий файл читает IDENTIFIER, например:

IDENTIFIER_REGEX (_|[A_Za-z])(_|[0-9A-Za-z])*

{IDENTIFIER_REGEX}     { yylval.identifier=strdup(yytext); return IDENTIFIER; }

Я не мог просто использовать yylval.identifier.Я пытался $2.identifier или около того, но он просто не работает (и все равно не должен работать).Есть ли способ решить эту проблему?

Я собираюсь использовать очередь FIFO, если bison / flex не поддерживает такой доступ.Это хорошее решение?

1 Ответ

2 голосов
/ 16 октября 2011

Вы можете указать тип токена при объявлении его (в файле зубров) так же, как и для нетерминалов (где вы будете использовать %type), например:

%token <identifier> IDENTIFIER

(где identifier - одно из полей, объявленных в %union). Тогда $2, $3 и т. Д. Будут указывать на правильную вещь, без необходимости проходить через yylval (т. Е. Они будут char * с в вашем случае).

...