提升:精神再利用规则

6 c++ boost-spirit

Hej,另一个问题:

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

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;
Run Code Online (Sandbox Code Playgroud)

我想把所有名为nmea的规则放到一个公共的地方,最好放到某个类的受保护的静态变量中.我想在精神文档中称为语法的东西是关键,但老实说,我对此还不太了解.

非常感谢!干杯!

Dan*_*mes 2

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

class nmea {
protected:
    static rule<> start, address;
};
Run Code Online (Sandbox Code Playgroud)

在您的实施文件中:

rule<> nmea::start = ch_p('$');
rule<> nmea::address = ch_p('$');
// etc.
Run Code Online (Sandbox Code Playgroud)

不过,我认为建议您使用成员变量。