[flex] Eingabe von Datei lesen

Aiju

Gesperrt
Wie kann ich mit flex nicht von stdin lesen, sondern von einer bestimmten Datei ?
Ich möchte bison/flex in ein Programm (ein Spiel) einbauen.
 
Hi.

:google: Das Thema gab's schon. Schau dir mal das Thema ab dem Beitrag hier an.

/edit: Quatsch, da hab ich wohl zu schnell gelesen. Das Thema gab's aber trotzdem schon. Du mußt einfach yyin einen Stream den du mit fopen() erstellt hast zuweisen.(steht übrigens auch in der Dokumentation von flex :google: )

Beispiel:
Code:
main( argc, argv )
int argc;
char **argv;
    {
    ++argv, --argc;  /* skip over program name */
    if ( argc > 0 )
            yyin = fopen( argv[0], "r" );
    else
            yyin = stdin;

    yylex();
    }

Gruß
 
Zuletzt bearbeitet:
Tut mir wirklich leid, irgendwie schaff ich keinen anständigen Suchstring zu formulieren ;)
Im Texinfo Manual habe ich wohl nicht gründlich genug gelesen...
Könntest du mir mal sagen, wie ich C++ Befehle in die .y Datei reinkriege, ohne bison++ zu verwenden. Tschuldige, wenn ich wieder mal beim Suchen versagt habe
 
Aiju hat gesagt.:
Tut mir wirklich leid, irgendwie schaff ich keinen anständigen Suchstring zu formulieren ;)
Also mein Suchstring war einfach nur "flex".

Aiju hat gesagt.:
Könntest du mir mal sagen, wie ich C++ Befehle in die .y Datei reinkriege, ohne bison++ zu verwenden. Tschuldige, wenn ich wieder mal beim Suchen versagt habe
Ich denke da brauchst du nur die Datei in eine .yy Datei umbenennen, dann generiert bison eine .cc Ausgabedatei (wenn ich mich recht erinnere).

Gruß
 
Nun, es gibt in Yacc den sogenannten Deklarations-, bzw. Definitionsteil indem du C++ Befehle asuführen lassen darfst. Auch kannst du dir eine eigene Yacc main Programm schreiben, darfst dies dann aber nicht mit den Parametern -ly -lfl kompilieren, da diese dafür stehen, dass ein main Funktion generiert wird, falls keine selbst definiert ist.


Du kannst ausserdem C Dateien sowie andere Headerdateien inkludieren.

Beispiel:

Code:
%{
  /*   Deklarationsteil   */
  #include "myheaders.h"
 %}
 %start zeile
 %left AUSDRUCK
 %%
 zeile : zeile AUSDRUCK zeile
 		| 
 		;
 %%
 
 #include "lex.yy.c"
//weitere Dinge....
 
Zurück