[C] flex/bison, statt von stdin aus Datei lesen

Onkel Schuppig

Erfahrenes Mitglied
Hallo Leute,
ich beschäftige mich mit flex/bison. flex verstehe ich schon ganz gut, nur bei bison hapert's noch etwas. Aktuelles Problem:
Bei einer Flex-Datei kann ich ja über yyin ziemlich einfach den Eingabestrom umschalten:
C:
/* file: test.l */
%{
...
%}

%%
...
%%

int main(int argc, char** argv) {
  if (argc > 1)
    yyin = fopen(argv[1], "r");
  else
    yyin = stdin;
	  
  yylex();
  return 0;
}
Wenn ich nun aber bison hinzunehme, wandert die main-Funktion ja in die Bison-Eingabedatei. Oder muss das nicht sein?
C:
/* file: test.y */
%{
...
%}
%%
...
%%
int main(int argc, char** argv) {
  if (argc > 1)
    yyin = fopen(argv[1], "r");
  else
    yyin = stdin;
	  
  yyparse();
  return 0;
}
Das funktioniert nicht, da nun yyin unbekannt ist. Merkwürdig, dass an keiner Stelle in den Manuals darauf eingegangen wird, wie der Dateizeiger umzubiegen ist. Auch im Internet finde ich nix. Wisst ihr Rat?
 
Hallo,

hast du schon mal versucht, die Ausgabe von flex in deiner test.y einzubinden? Also ein #include "lex.yy.c" (oder wie immer du die Ausgabedatei von flex benannt hast) vor main. Alternativ könnte auch ein extern FILE* yyin; helfen.

Grüße,
Matthias
 
Zurück