[英]Using a pointer to a parser in boost::spirit
基本上我正在做一個表達式解析器。 因為我需要盡可能好的性能,並且根據語法的文檔構造可能相當慢,我想在解析之前重用語法並綁定符號表。 由於語法的客戶端可能有一個在解析之前構造和維護的符號表,我理想地希望避免復制實際的表,這導致我轉換以下代碼(簡化)來翻譯術語:
qi::symbols< char, double >* m_Symbols;
qi::rule< Iterator, double(), ascii::space_type > m_Val;
m_Val = qi::int_[ _val = boost::phoenix::static_cast_< double >( boost::spirit::_1 ) ] | qi::double_ | m_Symbols;
這里的問題是m_Symbols。 我想要的是m_Val通過引用來保存m_Symbols,因為當我們綁定符號表時我自然會修改指針,我認為可以通過使用boost :: phoenix :: ref來解決這個問題。 但更大的問題是,在合成新的解析器時,我似乎無法使用指向解析器的指針。 在表達式中使用dereference立即取消引用m_Symbols,這是不需要的,我想延遲解除引用到解析時間。
我相信簡單
qi::symbols<char, double>* m_Symbols;
qi::rule<Iterator, double(), ascii::space_type> m_Val;
m_Val = qi::int_ | qi::double_ | qi::lazy(*m_Symbols);
應該做你需要的。 lazy
解析器(參見此處 )僅在解析時評估其參數(重復)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.