У меня ошибка при компиляции bison с опцией %define Parser.h

Мой файл Parser.y содержит приведенный ниже код.

%defines "Parser.h"

Я скомпилировал этот файл, и у меня есть ошибка ниже.

$ бизон Parser.y

Parser.y:27.10-19: синтаксическая ошибка, непредвиденная строка

Поэтому я прокомментировал эту строку.

//%defines "Parser.h"

Я скомпилировал этот файл, и у меня нет ошибок, но он не создал выходной файл заголовка.

И я изменил вариант компиляции.

$ bison Parser.y --define=Parser.h

Это было успешно, но я не хочу использовать опцию с командой «bison».

Другими словами, я хочу использовать параметр %define в файле bison.

Что я должен делать?

Извините за плохой английский.


person user2450120    schedule 04.06.2013    source источник
comment
опубликуйте полный код, чтобы другие могли запустить ваш код и увидеть ошибку   -  person pinkpanther    schedule 04.06.2013
comment
@pinkpanther спасибо за комментарий, но проблема решена. полный код находится здесь.   -  person user2450120    schedule 04.06.2013


Ответы (1)


Директива %defines поддерживается в Bison 2.6.2.

На первый взгляд кажется, что вы используете недостаточно новую версию Bison и ваша версия не поддерживает %defines. Однако это кажется маловероятным; вам придется использовать версию, которой десять или больше лет (первое упоминание в журнале изменений %defines датировано 2001 годом).

Другая возможность заключается в том, что вы не включили его в соответствующий момент файла грамматики. Я считаю, что он должен появиться перед первым %%, который отмечает начало собственно грамматики.

Вы можете попробовать опустить имя файла; если источником является Parser.y и вы пишете строку %defines, сгенерированный заголовок в любом случае будет Parser.h. Я не уверен, что это сработает, но попробовать стоит.

person Jonathan Leffler    schedule 04.06.2013
comment
Спасибо. Я использовал версию Bison 2.3 - person user2450120; 04.06.2013
comment
Я пробовал Bison 2.3 с минимальной грамматикой с %defines "file.h", и это не удалось; тот же код компилируется с Bison 2.6.2. Грамматика, которую я использовал, называлась min.y и состояла из трех строк: только %defines "minimal.h", %% и info: 'a' 'b' 'c'. Это создало довольно маленький (но определенно не минимальный) файл с именем minimal.h с Bison 2.6.2. Без имени файла строка %defines работает с Bison 2.3. - person Jonathan Leffler; 04.06.2013