Bison / Yacc: yyparse не объявлен в этой области - PullRequest
0 голосов
/ 09 июля 2011

Этот вопрос похож на этот , но для yyparse, а не yylex.

Я боролся с этим часами! Я хочу вызвать yyparse из программы на C (на самом деле, на C ++, но в итоге я использовал старый flex / bison, а не более новые для woops C ++ (даже не знал, что версии C ++ вообще существуют)). Единственная ошибка в том, что 'yyparse' was not declared in this scope. Я попытался определить переменную как глобальную, но, похоже, она не работает.

В файле Flex я пробовал:

extern "C" {
  int yyparse();
}

и это в файле Bison:

extern int yyparse();

но он ничего не сделал.

Итак .. Я думаю, что я неправильно связываюсь. Проблема в том, что я использую Qt, который автоматически создает файл make, поэтому я не могу редактировать его без повторного перезаписи. Есть ли способ исправить проблему без изменения ссылки? Если нет, то как сделать связывание?

1 Ответ

1 голос
/ 11 июля 2011

Объявление yyparse должно идти в заголовке, включенном в файл C ++, который вызывает yyparse, а не в файлы flex или bison, поскольку файл C ++ является тем, который требует объявления. bison создаст необходимые объявления в исходном файле, который он генерирует.

...