Глава "Альтернативы Пролога" в документах Bison

исал заголовок кода бизона:

%{
#include "foo.h"
%}

И я определил структуру с именем 'Foo' в заголовке. Я хотел бы использовать его в качестве типа токена в Bison.

%define api.value.type union
%token <Foo*> bar

Тогда я использую-d возможность генерироватьbison.tab.h файл.

bison -d bison.y

Но нет#include foo.h вbison.tab.hи использует struct Foo для определения объединения YYSTYPE.

//bison.tab.h
union YYSTPE {
    Foo* bar;
    ...
};

Это вызвало ошибку при компиляции этой программы:error: ‘Foo’ does not name a type

Есть ли способ включить заголовочный файл вbison.tab.h или другое решение этого дела?

 dhke09 дек. 2017 г., 08:46
"Но в bison.tab.h нет #include foo.h<= покажите (хотя бы верхнюю часть) свойfoo.h а такжеbison.y, Потому что из того, что в данный момент дается, так и делается.
 Ahmed Masud09 дек. 2017 г., 08:43
можешь поделиться своим bison.y?
 Some programmer dude09 дек. 2017 г., 08:44
Что вы положили между%{ а также%} не обрабатывается Bison, он копируется прямо в сгенерированный исходный файл C (или C ++). Вы не можете поместить специфичные для Bison операторы в заголовочный файл таким образом.

Ответы на вопрос(1)

Решение Вопроса

которые должны появляться как в .c, так и в файле .h (до определения для%union), вы должны использовать%code requires { ... }. %{ ... } вставляет код только в файл .c

Для получения дополнительной информации о различных%code варианты, вы можете посмотреть наГлава "Альтернативы Пролога" в документах Bison.

Ваш ответ на вопрос