這些其實是兩個問題。我們假設你編輯你的文本,以便 這個問題是關於新的構造函數API。對於累加器, 請發佈一個單獨的問題。
構造函數,include_push和reset的新API已完全重做 ,因此它可以處理任何類型的輸入。關鍵是 「ByteLoader」的抽象。 ByteLoader實現了 C-標準文件和流,POSIX文件描述符( - >用於套接字), 和從內存直接加載(在單元測試中很好地檢查大集合)。現在,這是如何使用?
您輸入的場景創建一個ByteLoader,即 '性病::流':
QUEX_NAME(ByteLoader)* byte_loader = QUEX_NAME(ByteLoader_stream_new)(&my_stream);
然後將它傳遞給構造(或放置新):
MyLexer lexer(byte_loader, /* converter */0);
如果你想在轉換內容上工作時,您可能必須創建一個轉換器並將其作爲第二個參數傳遞給 。因此, 完整代碼變得類似:
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);
這種類型的結構的詞法分析器的允許的靈活性最大 。對於C-Standard文件接口沒有限制, 輸入可以來自任何來源,例如套接字或串行線路。並且 輸入數據的轉換是在幕後進行的,而與緩衝區內容的同步完全由 詞法分析器完成。
請注意,構造函數將ByteLoader和Converter的所有權轉換爲詞法分析器。 沒有必要手動刪除它們。
頁眉和ByteLoader-S和轉換器-S實現是 位於
$QUEX_PATH/quex/code_base/buffer/bytes/...
和
$QUEX_PATH/quex/code_base/buffer/lexatoms/converter/...
如果你有新的類型ByteLoader-S或轉換-S的,提交他們作爲 的補丁。一旦他們被測試,他們很可能會被輸入到 的代碼庫中。
謝謝你,弗蘭克!一旦你知道它是如何工作的,新的API真的很乾淨:) – PatrikJ