GCC сообщает «синтаксическая ошибка перед числовой константой» в сгенерированном заголовочном файле из зубра

Когда я компилирую свой файл .y с помощью bison parser.y -d -t, а затем включаю файл parser.tab.h в свой гибкий файл, gcc говорит: «ошибка: синтаксис ошибка перед числовой константой. " Это ссылка на строку 32, которая является первой строкой в ​​перечислении yytokentype.

enum yytokentype {
   BREAK = 258,
   ... }

Ошибка в строке "BREAK = 258." Честно говоря, я не знаю, почему это происходит - я действительно хотел бы использовать сгенерированный yylval, и он мне нужен из этого заголовочного файла. Даже если бы я объявил yytokentype как это в моем файле flex, я получу ту же ошибку. Что-нибудь, что я мог сделать неправильно?

11
задан lesmana 6 May 2013 в 12:05
поделиться

2 ответа

Определено ли BREAK где-то еще в вашем коде? Я получаю подобную ошибку из следующего примера игрушки:

#define BREAK 10
enum yytokentype {
    BREAK = 258
};

Build example:

$ cc -c file.c 
file.c:4: error: expected identifier before numeric constant
20
ответ дан 3 December 2019 в 03:51
поделиться

Предположительно BREAK уже определен где-то в выходном гибком файле, поэтому после запуска препроцессора вы получите выражение вроде 99 = 258 или что-то в этом роде. Попробуйте посмотреть вывод cpp yy.lex.c или gcc -E yy.lex.c . Я просмотрел выходной файл гибкого формата, но нигде не нашел BREAK, только YY_BREAK.

6
ответ дан 3 December 2019 в 03:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: