基本上我正在执行一个表达式解析器。因为我需要尽可能好的性能,并且根据文档的语法结构可能会非常慢,所以我希望在解析之前重新使用语法并绑定符号表。由于语法的客户端可能有一个符号表,它在解析之前构建和维护,我理想的情况是避免复制实际的表,因此我导致下面的代码(简化)用于翻译术语:在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