Ich benutze ocamllex, um einen Lexer für eine Skriptsprache zu schreiben, aber ich habe einen Konflikt mit meiner Regel für Kommentare.Ist es in ocamllex möglich, eine Regel zu definieren, die auf das nächste Zeichen schaut, ohne es zu verbrauchen?
Ich möchte, dass meine Befehlsargumente nicht in Anführungszeichen gesetzt werden, solange sie nur alphanumerische Zeichen und Schrägstriche "/" enthalten. Zum Beispiel:
echo "quoted argument [email protected]#%" /this/second/argument/is/unquoted
Zusätzlich einer meiner Voraussetzungen bietet C++ Stil Kommentare mit "//"
//this is a comment
echo hello world
Das Problem ist dies Dinge wie
echo foo//comment
bringt Ich möchte Mein Lexer, um ein "foo" -Token zu produzieren, während auch das "//" unberührt bleibt, um in der nächsten Zeit verbraucht zu werden, frage ich den Lexer nach Token. Ist das möglich? Der Grund dafür ist, dass es möglich ist, dass der Eingabepuffer das Ende des Kommentars noch nicht erreicht hat und ich lieber sofort das "foo" -Token zurückgeben würde, als unnötigerweise zu blockieren, den Kommentar eifrig zu konsumieren.
Wenn Ihr Parser eine Regel hat, die nur 'echo foo' konsumiert, sollte das nicht ausreichen, um das Kommentieren von Kommentaren zu verschieben? – didierc
Auf Lexer-Ebene müssen Sie nur sicherstellen, dass Ihre nicht-quoted Params doppelte Schrägstriche enthalten können, andernfalls müssten Sie die Fälle unterscheiden, wo es passieren könnte, und vielleicht zwei Sätze von Regeln für – didierc
Sie haben oder nicht sollte wahrscheinlich ein kleines Programm zur Verfügung stellen, das das Problem zeigt, so dass wir sehen können, wie man es beheben kann. – didierc