Вот соответствующая ошибка:
grammar.y:72: error: conflicting declaration ‘typedef union YYSTYPE YYSTYPE’
y.tab.h:83: error: ‘YYSTYPE’ has a previous declaration as ‘typedef union YYSTYPE YYSTYPE’
make: *** [y.tab.o] Error 1
Я использую flex и byacc вместе, чтобы создать переводчик.Моя сборка имеет такую структуру:
- Создайте y.tab.h из файла grammar.y.
- Включите y.tab.h в файл tokens.lex и скомпилируйте его для получения lex.yy.c.
- Включить lex.yy.c обратно в файл грамматики.Таким образом, мы можем увидеть yylex.
Кажется, что происходит следующее: y.tab.h содержит объявление объединения YYSTYPE union.Это включается в lex.yy.c, который включается в grammar.y.Но в то же время grammar.y выпускает собственную версию объединения, и эти два столкновения.
Разве это не стандартный подход?Есть ли что-то, что мне нужно изменить, чтобы сделать его правильно?