# [flex] Eingabe von Datei lesen



## Aiju (24. Januar 2006)

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.


----------



## deepthroat (24. Januar 2006)

Hi.

 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  )

Beispiel: 
	
	
	



```
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ß


----------



## Aiju (24. Januar 2006)

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


----------



## deepthroat (24. Januar 2006)

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ß


----------



## Krypthonas (26. Januar 2006)

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:


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


----------

