管理Spirit 中的解析表達式
在此查詢中,我們探討將Spirit 解析器分配給自動變數時遇到的挑戰。雖然解析器在直接與 qi::parse() 一起使用時可能會無縫運行,但當解析器被指派給 auto 變數並重複使用時,就會出現問題。
這種行為的核心在於 Spirit 解析器的實作方式。 Proto 表達式模板構成 Spirit 的基礎,維護臨時變數的參考。當解析器指派給 auto 變數時,底層 Proto 表達式也會建立對臨時解析器的參考。
要解決這個問題,可以使用以下幾個選項:
例如:
namespace qi = boost::spirit::qi; int main() { auto bracketed_z = qi::copy( '[' >> +qi::char_('z') >> ']' ); // Uses qi::copy() string line = "[z]"; auto p = line.cbegin(); printf("%d", qi::parse(p, line.cend(), bracketed_z)); // Now works with auto variable // Alternative using BOOST_SPIRIT_AUTO BOOST_SPIRIT_AUTO(bracketed_z, '[' >> +qi::char_('z') >> ']'); }
這些方法透過打破解析器和臨時變數之間的引用鏈來解決問題,允許自動變數與Spirit 一起有效使用解析器。
以上是為什麼分配給'auto”變數的 Spirit 解析器會導致問題,以及如何修復它們?的詳細內容。更多資訊請關注PHP中文網其他相關文章!