c++ - 提升 :spirit reuse rules

标签 c++ boost-spirit

嘿,另一个问题:

我写了很多非常相似的解析器,它们使用了很多通用规则。我可以将这些 rule<> 对象存储在多个解析器可以访问的地方吗?它看起来像这样:

rule<> nmeaStart = ch_p('$');
rule<> nmeaAddress = alnum_p() >> alnum_p() >> !alnum_p() >> !alnum_p();
rule<> nmeaDelim = ch_p(',');
rule<> nmeaHead = nmeaStart >> nmeaAddress >> nmeaDelim;
...
/* other rules. Different for each parser*/
...
rule<> nmeaChkSumStart = ch_p('*');
rule<> nmeaChkSum = int_parser<unsigned int,16,2,2>();
rule<> nmeaTail = nmeaChkSumStart >> nmeaChkSum >> eol_p;

我想将所有名为 nmea... 的规则放在一个公共(public)位置,最好放在某个类的 protected 静态变量中。我想 Spirit 文档中称为语法的东西是关键,但老实说我还不太了解它。

非常感谢!干杯!

最佳答案

它们只是普通变量,您不需要做任何特别的事情。所以在你的标题中写:

class nmea {
protected:
    static rule<> start, address;
};

在你的实现文件中:

rule<> nmea::start = ch_p('$');
rule<> nmea::address = ch_p('$');
// etc.

不过,我认为还是建议大家使用成员变量。

关于c++ - 提升 :spirit reuse rules,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1015701/

相关文章:

c++ - boost karma - 从一个属性生成多个字符串

c++ - 如何将 std::vector<std::string> 转换为 boost::spirit 中结构的成员?

c++ - boost spirit 提取第一个词并将其存储在 vector 中

c++ - 标准库是否提供检查 double 是否与整数相同的函数?

c++ - Boost Spirit Grammar 检测登录失败

c++ - 将模板函数指针作为模板参数传递给模板过于冗长

java - 什么是 LD_LIBRARY_PATH 以及如何使用它?

c++ - 使用 Boost::Spirit 解析时出现段错误

c++ - 在基于 Makefile 的解决方案中使用 Visual Studio 调试器

c++ - 函数 C++ 中的新运算符