Когда я компилирую свой файл .y с помощью bison parser.y -d -t, а затем включаю файл parser.tab.h в свой гибкий файл, gcc говорит: «ошибка: синтаксис ошибка перед числовой константой. " Это ссылка на строку 32, которая является первой строкой в перечислении yytokentype.
enum yytokentype {
BREAK = 258,
... }
Ошибка в строке "BREAK = 258." Честно говоря, я не знаю, почему это происходит - я действительно хотел бы использовать сгенерированный yylval, и он мне нужен из этого заголовочного файла. Даже если бы я объявил yytokentype как это в моем файле flex, я получу ту же ошибку. Что-нибудь, что я мог сделать неправильно?
Определено ли BREAK
где-то еще в вашем коде? Я получаю подобную ошибку из следующего примера игрушки:
#define BREAK 10
enum yytokentype {
BREAK = 258
};
Build example:
$ cc -c file.c
file.c:4: error: expected identifier before numeric constant
Предположительно BREAK уже определен где-то в выходном гибком файле, поэтому после запуска препроцессора вы получите выражение вроде 99 = 258 или что-то в этом роде. Попробуйте посмотреть вывод cpp yy.lex.c
или gcc -E yy.lex.c
. Я просмотрел выходной файл гибкого формата, но нигде не нашел BREAK, только YY_BREAK.