簡體   English   中英

在boost :: spirit中使用指向解析器的指針

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM