PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Grundlegende Fragen zu Lex & Yacc


DarkMo
14.12.2009, 23:03
Hallo Community,

ich versuche mich im Rahmen eines Projektes in meinem Studium mit Lex & Yacc (Fach Compiler). Nun hab ich schon rumgegoogelt und auch viele Beispiele und Tutorials gefunden, auch in der readme/dem Manual zu meinem Flex von GnuWin32 steht das alles schön mit drin.

Mein Problem ist aber glaube ich viel simplerer Natur >< Ich weis ums verrecken nicht, wie ich dieses Ding da nutze. Im Manuel zu Flex steht dieser Code drin mit %% und dann sehr C ähnlicher Code usw. Eben diese bis zu 3 Bereiche da. Wenn ich aber mal so ein einfaches Bsp da eintippe, dann passiert einfach nichts. Also ich kann ja nichtmal das Eingetippte speichern oder so. Ich blick das einfach nich. Oder muss ich das direkt in C programmieren? Aber wozu hätt ich dann dieses Flex Zeug installiert?

Ich wäre euch sehr sehr dankbar, wenn ihr mir irgendwie helfen könnten (und das ich hier im richtigen Foren-Bereich bin ><). Hab im übrigen Win7 oder auch XP. Hängt das vielleicht daran? Weil das soll ja son Linux Krempel sein, nich das sich da was beisst und das ganze Interface fehlt oder so ^^


Alamar
14.12.2009, 23:13
Eh ich glaube dir würde eine ausführliche Einführung ins Konzept der Lexer/CompilerCompiler und explizit zur Syntax von Lex&YaCC nicht schaden.

In eurer Uni-Bibliothek gibt es (hoffentlich das Original in Englisch) "Compilers: Principles, Techniques and Tools" von Aho, Ullman, Sethi & nocheinerfrauinzwischen ;) , das leihst du dir aus. In diesem Buch gibt es ein "Subkapitel" das erklärt wie die vorher besprochene Theorie der Tokenerkennung mit Hilfe von Lex umgesetzt werden kann. (Im Kapitel 3 iirc)

DarkMo
14.12.2009, 23:18
wie gesagt, es geht mir weniger darum wie die sprache funktioniert. ich weis schlicht und ergreifend nicht, wie ich dieses tool da benutze ><

edit: als bsp hier mal das geöffnete flex fenster mit dem abgetippten beispielcode (wörter und zeilen zählen) im anhang

DarkMo
15.12.2009, 14:03
gibts denn niemanden, der mir erklären kann, wie ich dieses programm benutze? oder gibts vllt nen lex programm mit ner gescheiten gui? bzw überhaupt mal ner gui xD

bevor ich irgendwelche theorie oder syntax bla testen kann, muss ich ja erstma kapieren, wie ich dieses teil da bedien :/ (abgesehn davon, das ich nun schon soviel über den aufbau der regulären ausdrücke und eines lex-programms gelesen hab, das ich mir schon zutraue da was erstes kleines zu basteln - wenn ich nur wüsste wie ich den editor bedien).

edit: ähm, nur mal als blöde frage... mit flex bastel ich garnich den quellcode sondern das ganze teil dient mir nur dazu mein selbst erstelltes lex progrämmchen zu übersetzen und zu linken? oO wenn dem so is, kann man das nich irgendwo auf die erste seite jedes tutorials ganz groß in roten blinkenden lettern schreiben? -.- ich verzweifel nochmal irgendwann mit der denkweise von unix'lern ><

also ich bin gerade soweit: ich habe jetz im notepad den "quelltext" eingetippelt und gespeichert. wie die endung heisst scheint mir auch egal zu sein. die einen nennens .lex, die andern nur .l und ich vermute, wenn ichs .alfred nenne gehts auch (sofern ichs eben nur korrekt aufrufe dann). nun mein nächstes problem: makefile. erstmal meine vorstellung wieder: dieses flex is scheinbar nur sone olle konsole. welches file ich damit bearbeiten will muss ich intuitiv geläufig und einfach beim programm-aufruf schon angeben mit irgendwelchen kryptischen parameter angaben hintendran (allein der start des programms erfordert schon nen master-studium *lol*). gut, gehen wir mal davon aus, ich hätte flex nun gescheit gestartet mit all diesen angaben. wandelt er dass dann schon automatisch um ohne das man da noch was angeben muss? also sprich ich öffne flex mit den parametern um von .l zum bsp auf .c zu kommen. mit dem gcc link ichs dann indem ich flex erneut aufrufe - eben nur mit ner reihe anderer toller parameter usw usf.

nun zum makefile an sich. ich vermute mal, das das makefile nix andres sein soll, als ne kleine hilfestellung. eine zusammenfassung all dieser befehle in einem knopfdruck. sone art macro oder so. wenn das so is - wenigstens ein kleiner fortschritt ^^ dann schreib ich das ganze einmal un gut is. nun aber wieder die fragen: wie erstelle ich ein makefile? wieder einfach nur im notepad? wenn ja, welche endung muss da dran? weil das muss ja irgendwie als ein "flex-macro" vom system erkannt werden. wenn ich das .henneberta nenn, wird er mir wieder nur den notepad zum öffnen anbieten und ich hab rein garnix gekonnt. oder öffne ich wiedereinmal flex mit parameter rattenschwanz xyz und erstelle dort drin auf irgendeine geheime und mysteriöse art ein makefile?

auch wenn dieser text sehr sarkastisch und mit zähneknirschen geschrieben is (es hängt für mich sehr viel von dem projekt ab un son unix gehabe des programms versaut mir am ende noch mein leben - darauf kann ich gerne verzichten), so bitte ich eindringlichst und aufrichtigst um HILFE! bitte bitte bitte, ich muss das irgendwie verstehen wie ich diesen ganzen kram bedienen muss. BITTE.

AGGROStar1991
15.12.2009, 21:17
http://www.ijon.de/comp/tutorials/makefile.html
das erzählt dir was zu makefiles ;)
Tip nebenbei: nimm nen andern Editor^^ Scite ist mein Favorit. oder zumindest Notepad++

http://epaperpress.com/lexandyacc/
das vllt noch zu lex und yacc^^

Und die Dewnkweise von Unixern is einfach das die ganzen programme funktionieren sollen wie ein puzzle, sich also beliebig kombinieren lassen^^
Und auch GUIs braucht man doch gar nich soviel, wenn mans einmal verstanden hat.

mfg

DarkMo
15.12.2009, 22:35
also erstma danke für den link. schon beim 2. satz wusst ich scho wieder nich ob ich lachen oder weinen soll ><
Sie ist für Leute gedacht, die wissen, was das Programm make macht, und wozu man es verwendet, selber aber noch nie ein makefile erstellt haben.
immerhin gut zu wissen das das scho wieder irgend nen linux programm is. sicher genauso intuitiv zu bedienen :/ würd nich meine zukunft von abhängen hätt ich den scheiss scho längst verrückt lachend in die tonne gekloppt.

aber ok *wuuuusa* kannst du deinen feind nicht besiegen, versuch ihn wenigstens zu umgehn. dieses GNUmake is hoffentlich auch windows kompatibel? man ich will doch nur nen paar reguläre ausdrücke über nen string laufen lassen. man ich frag meinen prof ob ich das auch mit php machen kann -.- so eine gülle hier, sorry aber ich kann grad nich anders als mich aufregen. um mich rum bricht alles zusammen un dann muss ich mich noch mit sonem scheiss rumschlagen...

ne, ich muss erstma off gehn. das regt mich grad einfach nur auf. danke nochmal für die gut gemeinte hilfe. wenn linux in 100 jahren vllt mal auf seine nutzer eingeht un nich nur dem programmierer der programme zugänglich is, komm ich vllt auch mal nen schritt auf den kram zu *grml*

Jan Krüger
17.12.2009, 02:18
Schritt 1: .L-Datei schreiben.
Schritt 2: Befehl "flex datei.L" ausführen.
Schritt 3: Schritt 2 hat eine Ausgabedatei generiert. Ansehen, freuen.

DarkMo
17.12.2009, 18:25
gnaaa, das wars? muss die .l datei im verzeichnis der flex.exe liegen? najagut, das sollte das geringste prob sein. dann werd ich mal weiter tüfteln...

diese .c die er dann generiert kann ich kompilieren denk ich mal und dann ausführen und wenn ich dort was eingebe arbeitet der lexer schon?

aso, ne ich erinner mich an nen befehl mit gcc dateiname oder so. *probier* hmm, er sagt mir bei "flex gcc lex.yy.c" "felx: can't open gcc". ich tippe jetz mal, ich muss den extra ziehn? muss ich da auf kompatibilitäten achten? irgend ne bestimmte version? ich hab flex von gnuwine32.

auf jedenfall 1000 dank für diese simple verständliche anleitung ><

Jan Krüger
18.12.2009, 01:18
Naja, gcc führst du auf jeden Fall nicht via flex aus, sondern einzeln. :) Ob du ihn hast oder nicht, kann ich dir natürlich nicht sagen. Wie man den unter Windows am besten installiert, erklärt dir auch besser jemand anders.

Jedenfalls: die Ausgabedatei von flex ist, wenn ich mich richtig erinnere, nicht alleinstehend verwendbar. Du kannst allerdings ein eigenes Programm mit dem compilierten Objekt davon zusammenlinken und die von flex generierte Lexer-Funktion (yylex heißt die, glaube ich, aber das steht im flex-Handbuch) benutzen. Was du damit im einzelnen anstellst, ist deine Sache.

DarkMo
27.12.2009, 12:20
also ich hab mir jetzt mal MinGW besorgt. da is auch ne gcc.exe dabei und läuft in windoof. vin hier: http://www.kiesler.at/article27.html?page_num=3 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
collect2: ld returned 1 exit status

aufruf (nur mit dem standard lex.yy.c file da): gcc -o wc wc.c -lfl

erklrärung dazu: 3. Wenn Flex erfolgreich war, kompilieren wir es mit dem C-Compiler gcc, verlinken es mit der Flex-Bibliothek fl (-lfl) und erhalten die Ausführbare Datei wc (-o wc).

hat hier jemand nen anhaltspunkt für mich, wie ich das lösen kann? muss ich die wiedermal extra von irgendwoher ziehen? wenn ja, wäre nen link kuhl, da ne google suche nach fl sicher nich sehr erfolgreich enden wird :/ und ausserdem ne hilfestellung, wie ich das einbinden kann wäre dann noch schön :D

und nur nochmal zur erinnerung: ICH kenn mich 0 mit linux aus. ich arbeite grad auf WINDOWS (xp) damit. mein PROF will das ich das mach - nich ich! ^^

Jan Krüger
28.12.2009, 23:45
Such mal nach der libfl.dll (evtl. stattdessen libfl.lib oder libfl.a) und trag das entsprechende Verzeichnis in die Umgebungsvariable LIBRARY_PATH ein. Umgebungsvariablen kann man konfigurieren in Systemsteuerung -> System -> Erweitert (oder so) -> ... -> Umgebungsvariablen. Falls in der Variable schon was steht, trenn die verschiedenen Werte durch Semikolons voneinander.

Alternativ kannst du das Verzeichnis im gcc-Aufruf mit angeben: gcc ... -Lc:\irgend\ein\verzeichnis -lfl