基本上我正在執行一個表達式解析器。因爲我需要儘可能好的性能,並且根據文檔的語法結構可能會非常慢,所以我希望在解析之前重新使用語法並綁定符號表。由於語法的客戶端可能有一個符號表,它在解析之前構建和維護,我理想的情況是避免複製實際的表,因此我導致下面的代碼(簡化)用於翻譯術語:在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來以某種方式解決這個問題。但是更大的問題是,在合成新的分析器時,我似乎無法使用指針分析器。在表達式中使用解引用直接引用m_Symbols,這是不需要的,我想將解引用延遲到解析時間。
這似乎是減少語法實例數量的錯誤方法。爲什麼不只是有一個靜態/單例實例的語法,並使其不可複製? – ildjarn 2011-03-09 19:16:55
不幸的是,我仍然必須在解析之前綁定符號表,這會導致相同的問題。 – Ylisar 2011-03-10 12:16:48