# Hilfe mit Flex und Bison



## matrix1 (12. April 2010)

Hallo,
ich muss mit flex und bison interpreter schreiben. Ich hab mir zwar die beiden programme runtergeladen, weiss aber nicht wie ich sie richtig einsetze. Hab mich bisher bißchen im web umgesehen, verstehe abe nicht wie ich die einzelnen programme in verbindung bringen soll. Muss ich etwa den Quellcode in c schreiben und dann in flex compilieren und wie benutze ich flex. brauche dringend Hilfe bei der Sache.Danke.

MfG
Matrix


----------



## deepthroat (12. April 2010)

Hi.

Du mußt eine Eingabedatei für Flex (.l) und für Bison (.y) schreiben.

Die Dateien enthalten verschiedene Bereiche in denen du auch C Code schreiben kannst. Letzendlich generiert Flex einen Scanner und Bison einen Parser (beides als C Dateien) die dann natürlich noch kompiliert werden müssen.

Siehe z.B. http://epaperpress.com/lexandyacc/

Gruß


----------



## matrix1 (12. April 2010)

hallo,
vielen dank für deine schnelle Antwort. Also wie ich es verstehe werden die Eingabedateien in C geschrieben.
Was eigentlich mein problem ist, wie benutze ich flex und bison, muss ich die irgendwie mit c verbinden oder sind es eigene Programme.Danke.

MfG
Matrix


----------



## deepthroat (12. April 2010)

matrix1 hat gesagt.:


> hallo,
> vielen dank für deine schnelle Antwort. Also wie ich es verstehe werden die Eingabedateien in C geschrieben.


Nur teilweise.


matrix1 hat gesagt.:


> Was eigentlich mein problem ist, wie benutze ich flex und bison, muss ich die irgendwie mit c verbinden oder sind es eigene Programme.Danke.


Es sind eigene Programme. Beide generieren eine oder mehrere C Dateien.

 es gibt unzählige Anleitungen, HowTos usw. Hier gab es auch schon einige Themen darüber. Lies doch z.B. erstmal das PDF welches ich dir verlinkt habe, du kannst mir nicht erzählen das du's bereits gelesen hast. Und wenn du's beim ersten Mal nicht verstehst, dann lies es nochmal...

Gruß


----------



## matrix1 (12. April 2010)

hallo,
ich habs zwar durchgelesen, hab einige sachen verstanden, aber kannst du mir ahand eines ganz einfachen Beispieles zeigen wie man mit flex und bison handhabt, mein englisch ist nicht grad so gut. Hab gelesen, dass man auch flex und bison mit c verbinden kann dann erzeugt er automatisch die .l und .y datei. 
Alo ich habe eine .l und eine .y datei erzeugt. Wenn ich jetzt flex.exe öffne geht ein dos fenster auf, gebe ich da flex xxx.l ein passiert da nichts, es erzeugt kein c code. Kannst du mir bitte da weiterhelfen komme einfach nicht weiter, hab auch viel im weg gestöbert.Danke.


----------



## deepthroat (12. April 2010)

matrix1 hat gesagt.:


> hallo,
> ich habs zwar durchgelesen, hab einige sachen verstanden, aber kannst du mir ahand eines ganz einfachen Beispieles zeigen wie man mit flex und bison handhabt, mein englisch ist nicht grad so gut. Hab gelesen, dass man auch flex und bison mit c verbinden kann dann erzeugt er automatisch die .l und .y datei.
> Alo ich habe eine .l und eine .y datei erzeugt. Wenn ich jetzt flex.exe öffne


Das ist Unfug. Damit hast du ja flex schon gestartet, natürlich werden dann keine DOS-Befehle ausgeführt. Vielmehr wartet flex auf eine Eingabe auf der Standardeingabe bis du Strg-Z + Enter drückst.

Öffne eine Eingabeaufforderung und gib dort die Befehle ein.

Gruß


----------



## matrix1 (13. April 2010)

hallo,
ich habe mit einem normalem texteditor eine .l und eine .y datei erstellt, kannst du mir bitte sagen wie ich diese zu.c mit dem flex kompiliere, was muss ich denn in der Eingabeaufforderung eingeben, leider kenne ich mich nicht so gut in dos aus.Danke.

mfg
Matrix


----------



## deepthroat (13. April 2010)

matrix1 hat gesagt.:


> hallo,
> ich habe mit einem normalem texteditor eine .l und eine .y datei erstellt, kannst du mir bitte sagen wie ich diese zu.c mit dem flex kompiliere, was muss ich denn in der Eingabeaufforderung eingeben, leider kenne ich mich nicht so gut in dos aus.Danke.




```
flex datei.l
```
Siehe http://kontext.fraunhofer.de/haenelt/kurs/folien/Flex-ErsteSchritte.pdf

Gruß


----------



## matrix1 (13. April 2010)

hallo,
vielen dank für deine antwort, war sehr hilfreich, nun hab ich ein anderes Problem, wenn ich cygwin installiere kommt ganz am ende eine meldung "unable to extract /etc/ the fil is in use", hab alles geprüft, es läuft keine datei nebenbei, kannst du mir da weiterhefen.Danke.

MfG
Matrix


----------



## deepthroat (13. April 2010)

matrix1 hat gesagt.:


> hallo,
> vielen dank für deine antwort, war sehr hilfreich, nun hab ich ein anderes Problem, wenn ich cygwin installiere kommt ganz am ende eine meldung "unable to extract /etc/ the fil is in use", hab alles geprüft, es läuft keine datei nebenbei, kannst du mir da weiterhefen.Danke.


Beende alle anderen laufenden Programme (und melde dich ggf. nur unter einem Administratorkonto an) und installiere nochmal.

Gruß


----------



## matrix1 (13. April 2010)

hallo,
hat wunderbar geklappt, funktioniert alles.
Ich habe nun ein beispiel mit flex umgewandelt, nur beim compilieren, sagt er Zugriff verweigert, woran liegt das, im cygwin gibt es einmal den compiler gcc und cc hab beide probiert: gcc lex.yy.c, kommt leider die Fehlermeldung.dake.

MfG
Matrix1


----------



## deepthroat (13. April 2010)

matrix1 hat gesagt.:


> hallo,
> hat wunderbar geklappt, funktioniert alles.
> Ich habe nun ein beispiel mit flex umgewandelt, nur beim compilieren, sagt er Zugriff verweigert, woran liegt das, im cygwin gibt es einmal den compiler gcc und cc hab beide probiert: gcc lex.yy.c, kommt leider die Fehlermeldung.dake.


Anscheinend hast du die Ausgabedatei noch irgendwie geöffnet. Hast du die gerade ausgeführt?

Verwende einen anderen Dateinamen:
	
	
	



```
gcc -o prog.exe ley.yy.c
```
Und kopiere ggf. die genau Fehlermeldung.

Gruß


----------



## matrix1 (13. April 2010)

hallo,
hab noch ne frage, ich möcht gern ein Beispiel programm generieren, dieses hier:
%{
#include <ctype.h> 
%}

%%
[A-Z]      printf("%c",tolower(yytext[0]));
[a-z]	     printf("%c",toupper(yytext[0]));
"Ende\n"   return 0;
%%

aber leider klappt es nicht beim kompilieren kommt ne fehlermeldung, dieses Programm soll kleinbuchstaben groß und großbuchstaben zu kleinen umwandeln, 
fehlermeldugn ist, undefined reference to yywrap
collect2: ld return 1 exit status.Danke.

MfG
Matrix


----------



## matrix1 (14. April 2010)

Hallo,
 hab ein Problem und komm überhaupt nicht mehr weiter,
ih möchte einen Tachenrechner generieren, mit flex lässt es sich auch generieren klappt auch nur sobald ich mit bison kompiliere, kommt ein Fehler , keine ahnung wie man ihn beseitigen kann, wäre sehr nett, wenn du mir helfen könntest.

Hier der ode:

Flex:

%{
#include <stdio.h>

#define TOK_ADD 0x01
#define TOK_SUB 0x02
#define TOK_NUM 0x03

int tmpv=0;
int token;

%}
%option noyywrap
%%

\+       { return TOK_ADD; }
-        { return TOK_SUB; }
[0-9]+   { tmpv=atoi(yytext); }
[\n\t ]+       {}

%%

int main ()
{
   yyparse(); 
   int value=0;

   while(token=yylex()) {
      switch(token) {
      case TOK_ADD:
         value+=tmpv;
         break;
      case TOK_SUB:
         value-=tmpv;
         break;
      }
      tmpv=0;
      printf("\t -> %i\n", value);
   }

}

Bison:

%{
#include <stdio.h>

%}
%token TOK_ADD
%token TOK_SUB
%token TOK_NUM

int vtmp1, vtmp2;
%%
commands: /**/ | commands command;

command:  add | sub;

add:
   TOK_NUM TOK_ADD TOK_NUM
   {
      printf("\t->%i\n", vtmp1+vtmp2);
   };

sub:
   TOK_NUM TOK_SUB TOK_NUM
   {
      printf("\t->%i\n", vtmp1-vtmp2);
   };

%%

int main ()
{
  [0-9]+   { vtmp1=vtmp2;
            vtmp2=atoi(yytext);
            return TOK_NUM;
           }

}


es kommt die Fehlermeldung:

calculator.tab.c: 107: error: parse error before "int"
calculator.y: in function 'main':
calculator.y::31:error: parse before '[' token
calculator.y::32:error: 'yytext' undeclared (first use in function)
calculator.y::32:error: for each function it appears in.)
calculator.y::32:error:  invalid lvalue in assignment
calculator.y: At top level:
calculator.y::36:error: parse error before ')' token 
Danke.

MfG
Matrix


----------



## deepthroat (15. April 2010)

Hi.

Was machst du da? Du mußt in dem 3. Abschnitt der Bison-Datei korrekten C-Code angeben. Wobei da noch mehr durcheinander geht.

Wie alt bist du denn? Kannst du nicht noch ein paar Jahre warten? Mal ehrlich, das hat doch irgendwie keinen Zweck wenn du schon Schwierigkeiten damit hast zu Suchen, anderen Code bzw. Anleitungen zu verstehen geschweige denn Anpassungen für deine Zwecke durchzuführen...

Gruß


----------



## matrix1 (15. April 2010)

hallo,
ich habe diesen code aus dem Internet, bin grad dabei mich in flex und bison einzuarbeiten, hab doch gesagt dass ih neuling bin in diesem Gebiet, bin ja kein profi und beherrsche auf anhieb was da abgeht, muss ja auch verstehen wie was funktioniert, kann ja wohl niht alles erträumen.

MfG
Matrix


----------

