Подтвердить что ты не робот

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

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

enum yytokentype {
   BREAK = 258,
   ... }

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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