meine Chancen stehen vielleicht sonderlich gut hier jemanden zu finden, der sich mit sablecc auskennt, aber vielleicht kann mir ja doch jemand helfen.
Ich muss aktuell für die Uni einen Parser für eine kleine Programmiersprache (H3) schreiben (Abgabe bis nächsten Dienstag), wofür ich (wie empfohlen) sablecc verwende. Mittlerweile habe ich alle Konstrukte der Sprache abgedeckt mit einer Ausnahme:
Geschachtelte Block-Kommentare.
Momentan arbeite ich bei sablecc zur Erkennung der Blockkommentare mit States. Beim erkennen von '{-' wechselt der Lexer von normal in block_comment modus und beim erkennen von '-}' von block_comment wieder in den normal-modus.
Der entsprechende Teil der sable-datei sieht dabei so aus:
Das Problem ist, wenn ich versuche den Block-Kommentar als ein ganzes Token zu matchen, kann ich nicht garantieren dass mit dem Block-Ende der Lexer auch wirklich das Token beendet, da ich ja zwischen den Block-Zeichen jedes Zeichen (und damit eben auch die beiden zeichen, die für die block-kommentare zuständig sind) haben kann.
De facto bräuchte ich einen Zähler für die Tiefe des Block-Kommentars, die Frage ist ob sable mir so etwas in der Eingabe-datei erlaubt und wenn ja wie. Die einzige Alternative die ich sonst momentan habe wäre die von sable erzeugte Parserklasse diesbezüglich umzuschreiben, was ich wirklich ungern täte.
Weiß jemand zufällig wie so etwas in sable funktioniert, oder welche anderen Ansätze erfolgsversprechend sein könnten? Bin hier momentan wirklich überfragt.