Как вернуть литералы из flex в yacc? - PullRequest
1 голос
/ 17 ноября 2009

В моем файле yacc есть такие вещи:

var_declaration : type_specifier ID ';'
                | type_specifier ID '[' NUM ']' ';' ;

type_specifier : INT | VOID ;

ID, NUM, INT и VOID - это токены, возвращаемые из flex, поэтому у yacc нет проблем с их распознаванием. Проблема в том, что в вышеприведенном есть такие вещи, как '[' и ';'. Когда они распознаются flex, что должно быть возвращено в yacc?

1 Ответ

4 голосов
/ 17 ноября 2009

Вы можете просто вернуть самих персонажей. Токены гарантированно не конфликтуют с символами ASCII:

http://www.gnu.org/software/bison/manual/html_node/Token-Decl.html

Бизон автоматически выберет коды которые не конфликтуют друг с другом или с символами ASCII.

Итак, в вашем гибком файле

[\[\];]     { return yytext[0]; }

в порядке.

...