GCC говорит «синтаксическая ошибка перед числовой константой» в сгенерированном заголовочном файле из зубра - PullRequest
11 голосов
/ 13 августа 2010

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

enum yytokentype {
   BREAK = 258,
   ... }

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

Ответы [ 2 ]

20 голосов
/ 13 августа 2010

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

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

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

$ cc -c file.c 
file.c:4: error: expected identifier before numeric constant
6 голосов
/ 13 августа 2010

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

...