# lex & yacc



## DarkMo (22. November 2009)

hallo community,

fürs studium brauch ich lex & yacc, aber ich bin scheinbar grad zu blöd zum googlen :/ jedenfalls find ich einfach nix gescheites zum downloaden. also irgend ne entwicklungsumgebung dafür. hatte was gefunden wo sich dann firewall oder virenscanner aufgeregt hatten, das sich das in irgendwelche kerndateien oder so schreiben will und ich hab ganz flink ma die pfoten von gelassen.

vllt kennt ja jemand von euch eine seriöse downloadquelle. mehr als generelle infos find ich irgendwie nich, oder nur so komisches zeug.

danke schonmal im vorraus


----------



## Jared566 (24. November 2009)

nimm dir doch mal eine virtuelle Maschine zum testen deiner bisherigen Software. Darauf kannst du auch wunderbar Programmieren. 

bei der Virtuellen Maschine kannst du dann auch die Firewall ausschalten, dann hört die auch auf zu meckern, und du machst dir nicht dein eigenes System kaputt, zur not kannst du dann auch die VM zurücksetzen, oder leg dir vor dem installieren des programms ein backup der VM-Platte an.

Virtual PC bekommst du hier
oder, fals du linux als betriebssystem nutzt, VirtualBox hier

Mit freundlichen Grüßen

Jared


----------



## DarkMo (24. November 2009)

ich hab schon überlegt das direkt aufm campus zu machen in nem pc pool, da sollte das auch drauf sein. falls doch nich, werd ich die variante mal probieren. thx


----------



## DarkMo (14. Dezember 2009)

also ich hab jetz nach zig uni-pdf's auch mal was gescheites gefunden und versuche irgendwie da was hinzubekommen. überall tutorials wie man dies schreibt, wie das aufgebaut is un un un. ich kanns bald auswendig. aber NIRGENDS steht, wie man den mist überhaupt erstellt. ich hab jetz das felx fenster offen. ne einfache konsole scheinbar wie cmd. nichma sone menüleiste mit datei oder so. wenn ich da jetz was eingeb - passiert garnix. also ich schreib halt meinen text (hab mal son simples bsp abgetippelt) und das wars. wie kann ich das speichern? wie kann ichs wieder aufrufen? wie zum geier bediene ich diesen mist *argh*

dieser linux rotz is nur zum brechen. können die kerle keine gescheite software schreiben? -.-

ich hoffe hier findet sich irgendwer, der bissl ahnung hat und mir helfen kann wie ich diesen kram bedien. oder zumindest nen andres forum, wo ich antworten finden könnte.


----------



## k-b (20. Dezember 2009)

Vielleicht solltest du deine Frage noch mal neu formulieren und diesmal auch Inhalt rein bringen. Also erklären was du suchst oder was du machen möchtest. Wenn du dich nur auskotzen willst, kann der Thread auch geschlossen werden


----------



## DarkMo (21. Dezember 2009)

ich komm scheinbar nich mit der philosophie des programmbaus von unix'lern klar. ich studiere hier unter anderem fächer wie software-ergonomie und ich möchte meinen das wäre eines der fächer, das jeden unix user zum verzweifeln bringt ^^

ich habe zig tutorials gelesen und überall steht das selbe drin. ist ja gut solange ich was über die sprache da wissen will. also wie reguläre ausdrücke funktionieren, wie so ein programmcode aussehen muss. allerdings steht nichmal im handbuch von flex drin, wie man das programm selber nutzen muss. man brauch das ding eigentlich nur, ums für ne sekunde per cmd aufzurufen mit diversen parametern hinten dran. is doch völlig logisch, das ich mit ner flex-ide (so wie ich das zumindest auffasse) nich entwickelt, sondern mit dem stino notepad und dann das textfile da einfach durchjage.

wenn mans mal weis isses simpel wie die hölle - aber komm mal auf sowas -.-

aktuell steh ich vor den problemen, das ich nen gcc noch suchen muss und vllt sogar son makefile programm (ja, das das nen extra programm ist wird auch nirgends erwähnt - geschweige denn wie es funktioniert ) naja und schluss endlich natürlich noch yacc (also bison wohl, wenns das für windoof gibt). un wenn ich dann nach nem monat recherche rausgefunden habe, wie ich 10 zeilen code zum laufen bringe kann ich vllt auch endlich mal anfangen was für mein eigentliches projekt zu machen - danke an das intuitive unix!

ps: nur damit du meinen groll verstehst: in jedem windowsprogramm wäre ich schon 10meilen weiter und wenn es noch so kompliziert wäre und dummerweise ist es halt mein persönliches problem, das das ganz und garnicht konform mit meinem zeitplan geht und dieser zeitplan nahe dran an lebenswichtig ist (was keine untertreibung darstellt - meine zukunft hängt von sonem unhandlichen zeug ab, was jeden beruflich arbeitenden programmierer seinen beruf kosten müsste, zumindest wenn ich dem trauen darf, was ich hier so lerne).


----------



## Dragonix (24. Dezember 2009)

DarkMo schrieb:


> ich komm scheinbar nich mit der philosophie des programmbaus von unix'lern klar. ich studiere hier unter anderem fächer wie software-ergonomie und ich möchte meinen das wäre eines der fächer, das jeden unix user zum verzweifeln bringt ^^
> 
> ich habe zig tutorials gelesen und überall steht das selbe drin. ist ja gut solange ich was über die sprache da wissen will. also wie reguläre ausdrücke funktionieren, wie so ein programmcode aussehen muss. allerdings steht nichmal im handbuch von flex drin, wie man das programm selber nutzen muss. man brauch das ding eigentlich nur, ums für ne sekunde per cmd aufzurufen mit diversen parametern hinten dran. is doch völlig logisch, das ich mit ner flex-ide (so wie ich das zumindest auffasse) nich entwickelt, sondern mit dem stino notepad und dann das textfile da einfach durchjage.
> 
> ...



Sry.. aber ich kanns mir nich verkneifen  -- dafür spar ich mir jeden Kommentar wie RTFM 
>man flex

```
NAME
       flex - the fast lexical analyser generator

SYNOPSIS
       flex [OPTIONS] [FILE]...

DESCRIPTION
       Generates programs that perform pattern-matching on text.
```
oder
>flex --help

```
Aufruf: flex [OPTIONEN...] [DATEI...]
Generiert Programme, die Mustererkennung in Texten durchführen.
...
```

Bei beiden steht dann auch noch das was du wissen willst, die man page gibt dir auch noch den Verweis auf "info flex"...

Evtl hilfts beim nächsten mal, das geht nämlich eigentlich für so ziemlich jedes installierte Programm 
Trotzdem ein ergonomisch schönes Weihnachtsfest


----------



## DarkMo (24. Dezember 2009)

un wo bitte geb ich ">man flex" ein? >< im handbuch.pdf steht davon nix. in der readmy steht nix... un gedanken lesen welche obskuren befehle sich da irgendein programmierer mal ausgedacht haben will kann ich au ned. glaub mir ich bin nich blöd un das FM hab ich als erstes gelesen -.-


----------



## Dragonix (24. Dezember 2009)

Entschuldigung, aber irgendwie ist bei dir der Wille das in irgendeinerweise verstehen zu wollen nicht ersichtbar.
Wo wird man man flex wohl eingeben? Terminal? Wo denn sonst..


----------



## k-b (24. Dezember 2009)

Bei einem Programm für die Unix Konsole zuerst mal die Manpage zu konsolidieren sollte aber selbstverständlich sein


----------



## DarkMo (24. Dezember 2009)

ähm, wie ich schon sagte: ich habe noch NIE linux/unix oder so benutzt (naja, 2mal mit dieser knoppix rettungs-dvd die genauso furschtbar is). ich nutz das in windows un sowas wie nen terminal gibts hier nich. was is so falsch daran ne menüleiste einzubauen wo man bequem gut ersichtliche punkte mit der maus auswählen kann - wie zum bsp ne befehlsreferenz oder eben das manual (nich das dämliche pdf da).

ich will ja nich meckern oder mich doof stellen, aber es gibt schlichtweg auch noch was anderes wie dieses blöde linux gelumbe da. und ich bin einfach nur ein benutzerfreundliches windows gewöhnt. fällt der versuch so schwer, sich in meine lage zu versetzen? :/

ps: wenn ich flex einfach so aufrufe, ohne parameter hab ich ja auch nur son konsolenfenster (ohne alles -.-) - is das szs das terminal? als ich da mal was eingegeben hab kam jedenfalls keinerlei fehlermeldung das er was nich kennt beim enter drücken, also geh ich mal nich davon aus.


----------



## k-b (24. Dezember 2009)

DarkMo schrieb:


> ich will ja nich meckern oder mich doof stellen, aber es gibt schlichtweg auch noch was anderes wie dieses blöde linux gelumbe da.


Ja, aber es gibt auch linux. Viele kleine Tools die man über die Kommandozeile bedienen kann und miteinander kombinieren kann und von denen jedes seine präzise definierte Aufgabe *perfekt* erledigt und zugleich noch mit Dokumentation ausgeliefert wird.

Eine andere Welt auf die man sich genau so einlassen kann, wie du erwartest das die Programme sich dir anpassen


----------



## DarkMo (24. Dezember 2009)

ich komme mit linux nich klar. das weis ich, das weis linux und bevor wir uns da sinnlos zoffen zieh ich mir das zeug eben für windows (wenns schon angeboten wird). aber es ist wirklich so, das ich hier im studium lerne wie genau sowas unter aller kanone is. funktionalität hin oder her, wenns keiner bedienen kann isses sinnfrei. würde ich son programm schreiben und das als diplomarbeit abgeben wollen, dann würden die mich auslachen und exen. aus die maus.

jedenfalls zum kern der sache: bitte denkt bei euren erklärversuchen daran, das ich von linux absolut 0 plan habe und auf kriegsfuß damit stehe. und das ich mich hier dennoch damit bemühe und immer wieder weiterfrage und versuche den thread zu retten sollte doch wohl zeigen, dass ichs wenigstens versuche all meine widerstände diesbezüglich zu brechen und es versuche zu verstehen. nur es bringt keinem was, wenn hier von wissen ausgegangen wird, das ich nicht besitze und ich will mich deswegen auch ned dumm anmachen lassen.

gibt sicher genug das ihr aus desintresse nich wisst aber ich und ich würde es natürlich nicht (bewusst ) ankreiden.

dennoch danke für eure gedult mit mir ><


----------



## Thomsn (24. Dezember 2009)

Ich finde deine Problembeschreibungen aber auch alles andere als konkret. Hier jemanden zu finden, der Ahnung davon hat und dir direkt helfen kann wäre schon Glück. Wenn so einer nicht aufkreuzt, sollte man es den anderen (wie mir) schon noch möglichst einfach machen zu verstehen, was genau du willst.


----------



## Jared566 (25. Dezember 2009)

DarkMo schrieb:


> ich komme mit linux nich klar. das weis ich, das weis linux und bevor wir uns da sinnlos zoffen zieh ich mir das zeug eben für windows (wenns schon angeboten wird). aber es ist wirklich so, das ich hier im studium lerne wie genau sowas unter aller kanone is. funktionalität hin oder her, wenns keiner bedienen kann isses sinnfrei. würde ich son programm schreiben und das als diplomarbeit abgeben wollen, dann würden die mich auslachen und exen. aus die maus.
> 
> jedenfalls zum kern der sache: bitte denkt bei euren erklärversuchen daran, das ich von linux absolut 0 plan habe und auf kriegsfuß damit stehe. und das ich mich hier dennoch damit bemühe und immer wieder weiterfrage und versuche den thread zu retten sollte doch wohl zeigen, dass ichs wenigstens versuche all meine widerstände diesbezüglich zu brechen und es versuche zu verstehen. nur es bringt keinem was, wenn hier von wissen ausgegangen wird, das ich nicht besitze und ich will mich deswegen auch ned dumm anmachen lassen.
> 
> ...



wenn du von linux keine ahung hat und dann ein programm bendienen musst ist das schon übel. aber warum machst du es dann erst mit linux? ^^ sry, aber wenn man linux nicht kann, muss man sich andere wege suchen  

das mach ich auch so ^^

zb. versuch mal einen apache webserver mit mysql unter linux einzurichten ohen kenntnisse.. dann man ich es halt erst unter windows (virtuelle maschine) und wenn ich dann das prinziep verstanden habe, versuche ich es in linux..
will sagen: lerne die grundkenntnisse doch in windows. der systax von der programmiersprache ist doch die selbe  und wenn du dich dann fitt genug fühlst, versuch es in linux (wenn es sein muss ^^)

du musst es ja nichtmal auf deinem pc installieren, sondern leg dir einfach eine virtuelle maschine an. die kannst du, fals etwas schief läuft zurücksetzten, oder wenn du es nicht mehr brauchst, löschen.

Mit freundlichen Grüßen

Jared


----------



## DarkMo (26. Dezember 2009)

tja, nich ICH will das, sondern mein prof  und ich versuch es ja zu umgehn indem ich die windows-version benutz ^^ nur doof, das das eben immernoch im linux stil läuft und ichs zwar nutzen kann, aber immernoch nich weis wie ^^


----------



## k-b (26. Dezember 2009)

Ich glaub auf den Mailinglisten von den Tools die du benutzen willst bist du besser aufgehoben. Da sind auch Leute die sich damit auskennen. Wenn das PCGHx-Forum für so eine komplexe Fragestellung wirklich deine einzige Anlaufstelle ist, dann bist du nur halb so verzweifelt wie du tust 

Tipp: Da solltest du dich aber freundlicher ausdrücken, sowie eine konkrete Frage stellen


----------



## DarkMo (27. Dezember 2009)

bin parallel noch in nem coding board. aber geht überall schleppend vorran. atm versuch ich den gcc zum laufen zu bekommen. MinGW hab ich gezogen und versuche mit -lfl mit soner komischen bibliothek zu linken un er kennt natürlich lfl ned ^^


----------



## k-b (27. Dezember 2009)

Was hällt dich eigentlich davon ab das ganze unter Linux zu machen? Setz einfach ne vm auf - dann klappen auch die Tutorials die da drausen schon sind.


----------



## DarkMo (28. Dezember 2009)

du meinst linux an sich zu installieren? ich komme mit sonem simplen kleinen proggy nich klar, aber soll mal eben son vm einrichten (wo ich keinen blassen von hab ^^) und noch gleich nen komplettes linux draufhauen? :/ bin ja garnich so begeistert :'(


----------



## Dragonix (28. Dezember 2009)

Was klappt beim gcc nicht? Schreib mal GANZ konkret deine Dateien und die Libs gegen die du linken möchtest..
Wobei ich den gcc noch nie selber unter windows verwendet hab (codeblocks als IDE sei dank..), das erscheint mir unter linux wesentlich einfacher..


----------



## DarkMo (28. Dezember 2009)

das hier hab ich im andern forum geschrieben:


			
				DarkMo schrieb:
			
		

> also ich hab mir jetzt mal MinGW besorgt. da is auch ne gcc.exe dabei und läuft in windoof. vin hier: Lexikalische Analyse mit Lex - Kiesler phpWebsite consulting hab ich mal den aufruf ausm makefile nachgestellt (das .c file in den selben ordner kopiert) und es kommt folgende fehlermeldung:
> 
> warning: no newline at end of file
> cannot find -lfl
> ...



hm joa ^^


----------



## Dragonix (28. Dezember 2009)

Der findet die libfl.a nicht. Wo die ist weißt blos du 
Evtl mal in den lib ordner kopieren.. falls ich find wie man dem gcc nen absoluten Pfad zu ner lib unterjubelt meld ich mich nochmal..
Edit:
http://www.gnu.org/software/libtool/manual/html_node/Linking-executables.html
>> gcc *blubb* -L/Pfad/zur/lib
sollte gehen. Egal ob -L/pfad/zur/lib oder -L/pfad/zur/lib/libfl.a


----------



## DarkMo (28. Dezember 2009)

na der dateiname is ja schonmal nen super anfang. da werd ich mal suchen und probieren 

edit1: aha, der lümmel is bei flex dabei und gcc versucht drauf zuzugreifen - das kann ja nix werden. werd mal bissl rumkopieren und testen.

edit2: na holla die waldfeee - die warnung mit dem newline kommt zwar immernoch, aber nachdem ich die von GnuWin32\lib ordner (flex) in den MinGW\lib ordner (gcc) kopiert hatte, funzte es un ich hab ne wc.exe rausbekommen. na nu bin ich jam al gespannt.

edit3: verdämmt ^^ ich geb was ein, aber nix passiert :/ gibts da dann irgend nen befehlswort, was die eingabe beendet (wenn das auch die zeilen zählt, is das reine enter drücken ja sicherlich nich so erfolgreich) und den zählvorgang startet? (also is ja son wort/zeilen zähl programm). ach hm, oder muss ich das teil (die wc.exe) auch wieder über die cmd aufrufen mit nem parameter zu nem file hinten dran zum bsp? das er dann das file auswerten tut.


----------



## Dragonix (28. Dezember 2009)

>yyin=argc>1 ? fopen(argv[1], "r") : stdin;

Wenn du einen Parameter übergibst wird der anstelle von stdin ausgwertet. Probiers halt mal aus 

Die Warnung von wegen keine newline am Ende kannste ignorieren.

Ich scheiter grad an deinem Beispiel, vorzeitiges EOF, da is mir wohl was beim copy&paste schief gelaufen...

Edit2:
Läuft 

Also ich starts einfach (linux: ./wc) tipp mehrere zeilen rein, drück Crtl+D (==> End Of Line, weiss aber nich wie des unter Win geht) und der sagt mir des Ergebnis. Oder ich mach ./wc DATEI und dann gibt er mir das gleiche für die Datei aus.. Flex is voll toll, wieso haste mir das nich schon früher gesagt?!


----------



## DarkMo (28. Dezember 2009)

```
/*              Word Count with Lex.

                part of a lex-tutorial on
                http://www.kiesler.at/
*/


                int words=0;
                int lines=0;


WORD            [a-zA-Z0-9_]+

PUNCTUATION     [\.\ ?\;\,\!\-\&]+
WHITESPACE      [ \t]+
IGNORE          {PUNCTUATION}|{WHITESPACE}

NEWLINE         [\n]+


%%


{WORD}          words++;
{IGNORE}        /* */
{NEWLINE}       lines++;


%%


                main(int argc, char **argv) {
                        yyin=argc>1 ? fopen(argv[1], "r") : stdin;
                        yylex();
                        printf("%d word(s), %d line(s).\n",
                                words, lines);
                        exit(0);
                }
```
das (wc.lex) hab ich da durch flex gejagt -> lex.yy.c -> durchn gcc -> wc.exe

also muss ich die dann so aufrufen, dass der erste parameter größer 1 is um den 2. paramter (ein text file) dann ausgewertet wird. sprich sowas wie "wc 2 test.txt"? gleich mal probieren...

edit: hm ok. da macht er garnix. testfile mit 3 zeilen und 9 wörtern:


> hallo welt
> dies ist ein test
> palimmel palummel palam


als test.txt im selben ordner wie die wc.exe mit dem oben geschriebenen aufruf.


----------



## Dragonix (28. Dezember 2009)

DarkMo schrieb:


> ```
> /*              Word Count with Lex.
> 
> part of a lex-tutorial on
> ...



HAAAALT!
>wc.exe DATEINAME
reicht völlig. argc ist immer mindestens 1, da steht der Name (Pfad?) der Datei drinnen, die gerade ausgeführt wird. argc ist 2 wenn du noch den Dateinamen übergibst.
Edit: Beispiel:
wc.exe ==> argc = 1
wc.exe DATEINAME ==> argc = 2
wc.exe DATEI1 DATEI2 ==> argc = 3
AAAABER!!!! Mit 2 Datein geht das Programm nicht, ich wollts blos verdeutlichen.


----------



## DarkMo (28. Dezember 2009)

ach jetz schnall ichs. dank dir. gleich nochma probieren. ich hab das bisher nie genutzt weil ich nie wusst was es so recht bedeuten soll. jaja, die frühen schludrigen jahre im studium und das weitere desintresse dafür, da es auch ohne geht rächen sich halt doch ab und an ><

edit: woah, imbatiös! 9 wörter, 2 zeilen. ok, da kann ich gleich ma mim bugfix ran, so das er zeilen, un nich zeilenumbrüche zählt - sprich mit 1 statt mit 0 anfängt ^^

sau geil, nu kann ich endlich losleeeegen *flieg*

100 tausend millionen dank! ^^


----------



## DarkMo (29. Dezember 2009)

hmm, hab da grad noch ne andere frage dazu (daher sry für den doppelpost):

kann man mit einer batch datei folgendes realisieren?
- eine datei in einen ordner kopieren (wc.lex zBsp von meinem ordner mit der batch zum ordner mit der flex.exe)
- dort eine exe mit parameter(n) ausführen (die wc.lex durch die flex.exe jagen)
- die kopierte (nich das original) wc.lex soll wieder gelöscht werden
- dann wieder eine datei von einem ordner in einen anderen verschieben (nicht kopieren diesmal) -> lex.yy.c in den gcc ordner
- wieder exe mit parameter(n) ausführen
- ergebnisdatei in den batch ordner verschieben

soll mir dann quasi das programm make ersetzen so dass ich in einem ordner arbeiten kann ohne umständlichst immer hin und her zu tüdeln wegen jeder kleinen änderung bei der programm entwicklung/debugging.

falls mir da wer helfen kann/tipps geben kann, wäre ich wiedermal sehr zu dank verpflichtet (btw: bisher habt ihr nen explizites coding board geschlagen, also macht euch nich so klein  ihr seid guuut ^^).


----------



## Dragonix (29. Dezember 2009)

>>- eine datei in einen ordner kopieren (wc.lex zBsp von meinem ordner mit der batch zum ordner mit der flex.exe)
Kopieren geht unter Windwos mit copy

>>- dort eine exe mit parameter(n) ausführen (die wc.lex durch die flex.exe jagen)
Einfach
flex.exe PARAMETER

>>- die kopierte (nich das original) wc.lex soll wieder gelöscht werden
Dateien löschen geht mit
del

>>- dann wieder eine datei von einem ordner in einen anderen verschieben (nicht kopieren diesmal) -> lex.yy.c in den gcc ordner
Dateien verschieben geht mit
move

>>- wieder exe mit parameter(n) ausführen
exe.exe PARAMETER

- ergebnisdatei in den batch ordner verschieben
move

Wobei du dir die ersten Schritte vermutlich sparen kannst: flex.exe C:\Pfad\zur\Lex\Datei.lex


Am besten immer mit absoluten Pfaden arbeiten, dann ists auch egal wo die .bat/.cmd ist. Hilfe zu den einzelnen Befehelen bekommst du mit "/?" als Parameter, also z.B. "move /?". Hoffe ich konnte helfen


----------



## DarkMo (29. Dezember 2009)

ach sone bat is nix weiter wie ne sammlung von dos befehlen? quasi ein dos-makro? ^^ gut zu wissen und danke schonmal für den einstieg. werd ich mal tüfteln.

edit: steingeil. habe mir jetzt 2 bats geschrieben mit deinen tipps und bissl gesuche hier im forum:


			
				make.bat schrieb:
			
		

> @echo on
> C:\Programme\GnuWin32\bin\flex -oC:\Dokume~1\DarkMo\Desktop\compiler\wc.c C:\Dokume~1\DarkMo\Desktop\compiler\wc.lex
> C:\Programme\MinGW\bin\gcc -o C:\Dokume~1\DarkMo\Desktop\compiler\wc C:\Dokume~1\DarkMo\Desktop\compiler\wc.c -lfl
> del C:\Dokume~1\DarkMo\Desktop\compiler\wc.c
> exit


-> wandelt meine .lex per flex in eine .c und diese dann per gcc in die .exe



			
				use.bat schrieb:
			
		

> @echo on
> C:\Dokume~1\DarkMo\Desktop\compiler\wc test.txt > ergebnis.txt
> exit


-> verwendet die test.txt mit den eingabedaten mit der erstellten .exe und gibt eine ergebnis.txt zurück. was da drin steht, sollte klar sein ^^ funzt wunderbar. grad getestet.

ich kann mich nur wieder und wieder verbeugen ^^ falls interesse, werde ich meine odysse mal versuchen zusammenzufassen: wo hab ich was gefunden*, wie eingerichtet und wie genutzt bla blubb - falls nochmal wer so schwer von begriff is wie ich ^^



*ps: kann man hier notfalls auch die proggies gezippt anhängen so wie bilder? oder habt ihr das nich so gern wegen virengefahr? dann wäre man ggf nicht abhängig von links, die vllt irgendwann verschwunden sind ^^


----------

