Lexical analyzer



  • Hy,

    ich will so etwas wie eine neue sprache gestalten (sagen wir so etwas wie mysql)..

    Dazu benötige ich einen parser für die sprache. bevor man selber so einen hafuen theater anrichtet dachte ich, ich nutze etwas bereits existierendes.
    ..und dann an yacc und lex.

    Kann mir jemand gute litheratur hierzu empfehlen? ich kaufe gerne auch ein buch..
    Ist das eine gute lösung, oder gibt es inzwischen bessere?

    für gute tipps wäre ich echt dankbar..

    Gruss,
    Antonis.



  • Wenns C++ sein darf, wuerde ich Boost.Spirit.Qi empfehlen. Braucht etwas Einarbeitungszeit, aber wenn man die Prinzipien einmal kapiert kann man damit relativ einfach Parser schreiben. Insbesondere orientiert sich das Ding an der (E)BNF, sodass du eine vorhandene Grammatik relativ einfach in Code uebersetzen kannst.
    Buch brauchst du dafuer keins, die Doku ist sehr ausfuehrlich. Wenn du unbedingt Literatur haben willst, guck dich nach LL-Parser-Literatur um. Qi verwendet intern einen LL-Parser, wenn ich mich nicht taeusche.

    Von YACC und Lex wuerde ich eher abraten. Ich hab sie mir, wie einige andere aehnliche Sachen, mal angesehen, bevor ich zu Qi kam. Sie tun noch ihren Zweck, aber sind nicht mehr wirklich zeitgemaess. Und der generierte C-Code war damals nicht gerade angenehm zu lesen, soweit ich mich noch recht erinnere.



  • statt yacc und lex empfehle ich eher bison und flex.
    Der generierte code ist wie jonas schon bemerkt hat, nicht dafür gedacht von Menschen gelesen zu werden, aber deshalb benutzt du ja einen Generator.
    Wenn du Lexer u. Parser selbst schreiben möchtest, dann empfehle ich dir recursive descent Lexer/Parser zu schreiben die sind leicht programmierbar und gut verständlich (vorallem bei LL(1)).
    Annsonsten gibt es noch weitere Techniken und Haufenweise Generatoren und Frameworks mit verschiedener Mächtigkeit für verschieden Sprachen.

    Bei Sprachen empfehle ich dir eine ML verwandte Sprache (SML,ocaml) die sind sehr schön um Bäume zu bearbeiten, oder eine andere Sprache die Patternmatching unterstützt.



  • Sie tun noch ihren Zweck, aber sind nicht mehr wirklich zeitgemaess

    'Zeitgemaess' fuer ein sehr schlechtes Argument.

    generierte C-Code war damals nicht gerade angenehm zu lesen

    In welcher Sprache ist generierter Code angenehm zu lesen?

    Kann mir jemand gute litheratur hierzu empfehlen?

    Schon mal das Handbuch zu beiden gelesen? Was gefaellt dir an diesen nicht?



  • Hallo Zusammen,

    mein geplantes Projekt ist auch in c++ geschrieben, also ist boost schonmal keine so schlechte idee (obwohl bison ja auch c++ code generieren kann..).

    Doku ist eigentlich schon ausführlich, wie erwähnt und hört sich auch nach dem an, was ich suche.
    Wie ich die geparsten Zeilen auswerten und code entsprechend ausführen soll muss ich mir noch überlegen. Da muss ich noch ein wenig mit der lib herumspielen.

    Bison und flex hört sich auch als gute alternative an, muss ich mir noch genauer anschauen. Scheint auch vom Umfang her mächtiger als Qi zu sein.

    Danke für eure Antworten. Das bringt mich einiges weiter..

    Gruss,
    Antonis.


Anmelden zum Antworten