GCC говорит "синтаксическая ошибка перед числовой константой" в сгенерированном заголовочном файле от bison


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

enum yytokentype {
   BREAK = 258,
   ... }

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

2 10

2 ответа:

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

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

Пример сборки:

$ cc -c file.c 
file.c:4: error: expected identifier before numeric constant

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