Scannerbau - MiniCompiler?



  • hallo zusammen,

    ich habe die aufgabe bekommen einen scanner zu schreiben der eine datei einliest und nach einer bestimmten grammatik überprüft. bisher habe ich eigentlich kaum erfahrung mit c++ gehabt, deswegen möchte ich euch um hilfe bitten.

    ich habe zuerst einen buffer-klasse geschrieben, die die datei einliest.
    dann habe ich einen symbolTabelle-klasse geschrieben, die die grammatik enthält.
    wobei die klasse wird als linkedListe angesehen. das heisst die wörter der eingelesene datei wird in eine linkListe zugeordnet.

    könnt ihr mir irgendwelche tipps geben? vorgehensweise? hilfestellungen?

    versuch momentan die symbolTabelle zu implementieren, aber verständlich ist es nicht unbedingt für mich

    später muss noch die Zustände beschrieben werden.

    bitte um Hilfe



  • Musst du den Parser komplett selbst von Hand implementieren? Praktischer dafür sind Parsergeneratoren.

    Lex/Yacc:
    Lex oder auf flex (flex ist die C++-Variante von Lex) ist dabei ein Scannergenerator, mit dem man den Datenstrom in Tokens unterteilt. Die Überprüfung der Grammatik übernimmt dann der mit Yacc generierte Parser. Hier wird eine Grammatik spezifiziert, aus der dann der C oder C++ Code für den Parser generiert wird.
    Google spuckt hierzu einige Tutorials aus.

    Boost::Spirit:
    Hier kann man die Grammatik elegant direkt im C++-Quellcode definieren.
    Doku dazu:
    http://www.boost.org/doc/libs/1_41_0/libs/spirit/doc/html/index.html

    Viele Grüße

    Mahobi



  • Nimm boost spirit; ist sehr elegant und sehr flexibel. Ich baue damit Parser für alle möglichen Dinge 👍

    MfG


Anmelden zum Antworten