Dies sind eigentlich zwei Fragen. Angenommen, Sie bearbeiten Ihren Text so, dass sich diese Frage auf die neue Konstruktor-API bezieht. Für den Akku, bitte eine separate Frage stellen.
Die neue API für Konstruktor, include_push und Reset wurde vollständig redone, so dass es mit jeder Art von Eingabe fertig werden kann. Der Schlüssel dazu ist die Abstraktion eines 'ByteLoader'. ByteLoader sind implementiert für C-Standard Dateien und Streams, POSIX Dateideskriptoren (-> für Sockets verwenden), und direktes Laden aus dem Speicher (gute Prüfung für große Mengen von Szenarien in Unit Tests). Nun, wie wird das benutzt?
erstellen ByteLoader für Ihre Eingabe Szenario, nämlich 'std :: Strom':
QUEX_NAME(ByteLoader)* byte_loader = QUEX_NAME(ByteLoader_stream_new)(&my_stream);
gibt es dann an den Konstruktor (oder Platzierung neu):
MyLexer lexer(byte_loader, /* converter */0);
Wenn Sie möchten, Arbeiten Sie an konvertierten Inhalten, müssen Sie möglicherweise einen Konverter erstellen und als zweites Argument übergeben. Somit wird der vollständige Code so etwas wie:
QUEX_NAME(ByteLoader)* byte_loader = QUEX_NAME(ByteLoader_stream_new)(&my_stream);
QUEX_NAME(Converter)* converter = QUEX_NAME(Converter_IConv_new)("UTF-8", NULL);
MyLexer lexer(byte_loader, converter);
Diese Art der Konstruktion eines Lexer für maximal an Flexibilität ermöglicht. Es gibt keine Beschränkung auf C-Standard-Dateischnittstellen, der Eingang kann von jeder Quelle kommen, wie Sockets oder die serielle Leitung. Und die Konvertierung der eingehenden Daten erfolgt hinter den Kulissen, während die Synchronisation mit dem Inhalt des Puffers vollständig durch die Lexer Eninge getan wird.
Beachten Sie, dass der Konstruktor Ownership des ByteLoader und Konverter an den lexikalischen Analysator überträgt. Sie müssen diese nicht manuell löschen.
Kopf- und Implementierungen für ByteLoader-s und Converter-s sind befindet sich in
$QUEX_PATH/quex/code_base/buffer/bytes/...
und
$QUEX_PATH/quex/code_base/buffer/lexatoms/converter/...
Wenn Sie neue Arten von ByteLoader-s oder Converter-s, legt sie als ein Patch. Sobald sie getestet werden, werden sie wahrscheinlich in die Codebasis eingegeben.
Danke, Frank! Die neue API ist wirklich ordentlich, wenn Sie wissen, wie es funktioniert :) – PatrikJ