spirit::qi::不同字符大小的语法名称

spirit::qi::grammar-name with different char size

本文关键字:语法 字符 qi spirit      更新时间:2023-10-16

我正在制作一个带有spirit::qi的解析器,目的是使其与不同的字符大小兼容。

template < typename Iterator >
struct grammar : qi::grammar < Iterator >
{
    grammar () : grammar::base_type ( file, alter_string_size_to < Iterator::value_type > ( _szFile ) )
    {
    }
    qi::rule < Iterator > file;
};

考虑到

alter_string_size_to < Iterator::value_type > ( _szFile )

成功返回一个指针,指向包含所需字符大小的_szFile的字符串。

当我用编译时

Iterator = std::wstring::const_iterator

我收到以下错误消息

cannot convert parameter 2 from 'unsigned short *' to 'const std::string &'

所以。。grammar::base_type只需要常量std::string&作为第二参数。我的问题是,我如何告诉qi::grammar期望一个Iterators value_type大小的字符串?

提前感谢!

它在源代码中定义如下:

    grammar(
        start_type const& start
      , std::string const& name_ = "unnamed-grammar")
    : proto::extends<terminal, base_type>(terminal::make(reference_(start)))
    , name_(name_)
    {}
    std::string name_;

所以你不能。正如文档中所述:

name是一个可选字符串,用于为语法命名,对调试和错误处理非常有用。

因此,您必须根据它进行自己的查找。