#include "symtable.c"
#include "ast.c"
Вот твоя проблема. Включив эти два файла C в раздел requires
в step3.y
, их содержимое заканчивается как lex.yy.c
и step3.tab.c
, так что все определяется дважды.
Вместо этого вы должны включить заголовочные файлы, а не файлы C, а затем скомпилировать и связать ast.c
и symbtable.c
, передав их в gcc:
gcc step3.tab.c lex.yy.c ast.c symtable.c -o step3
(Вы также можете использовать Makefile
для компиляции каждого файла отдельно, а затем связать их вместе, так что вам нужно только перекомпилировать измененные файлы, но это совсем другое дело)
Обратите внимание, что это не характерно для сгибания или бизона. Вы не должны когда-либо #include
C-файлы, если вы точно не знаете, что это означает, и у вас есть очень веская причина.