Ich versuche, einen Bison-Parser für UTF-8-Zeichen zu erstellen. Ich möchte nicht, dass der Parser die Unicode-Zeichenwerte tatsächlich interpretiert, aber ich möchte, dass er die UTF-8-Zeichenfolge als eine Folge von Bytes analysiert.
Im Moment erzeugt Bison den folgenden Code, der problematisch ist:
%Vor%Das Problem besteht darin, dass viele Bytes der UTF-8-Zeichenfolge einen negativen Wert haben und Bison negative Werte als EOF interpretiert und stoppt.
Gibt es einen Weg dazu?
bison
ja, flex
nein. Als ich einmal einen Bison-Parser brauchte, um mit UTF-8-kodierten Dateien zu arbeiten, schrieb ich meine eigene yylex
-Funktion.
edit : Um zu helfen, habe ich eine Menge der Unicode-Operationen verwendet, die in glib (es gibt einen gunicode
Typ und einige Datei- / Stringmanipulationsfunktionen, die ich nützlich fand).
Das ist eine Frage von vor vier Jahren, aber ich stehe vor denselben Problemen und möchte meine Ideen teilen.
Das Problem ist, dass Sie in UTF-8 nicht wissen, wie viele Bytes gelesen werden sollen. Wie oben vorgeschlagen, können Sie Ihren eigenen Lexer verwenden und entweder ganze Zeilen lesen oder 4 Bytes jedes Mal lesen. Entpacken Sie dann das UTF-8-Zeichen und lesen Sie weitere Bytes, um erneut zu 4 Bytes zu vervollständigen.