gpt4 book ai didi

c++ - 使用 boost spirit 预处理自定义文本文件以删除注释

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:46:15 26 4
gpt4 key购买 nike

我的文本包含“方程式”,例如:

-- This is comment
ABC:= 121-XY1/7 > 45 OR SS >= 3
ZY2 AND -- This is another comment
(JKL * PQR) < 75;

JKL:= PP1 OR
PP2/2 XOR PP3;

ZZ_1:=A-B > 0 XOR (B2 % GH == 6 AND
SP == 4
-- Again a comment
NOT AX > GF < 2 OR C*AS2 >= 5);

我决定使用 boost spirit 来解析这段文本,现在我只需要知道我的操作数和运算符。

我提到了 this很好的答案(感谢 sehe :))来编写我的表达式语法(尚未编写关系运算符)

但是我不能删除我的评论:-

     qi::phrase_parse(input.begin()
,input.end()
,p >> ';' // parser object
,qi::space | "--" >> *(qi::char_ - qi::eol) >> qi::eol
,result //expression object, (boost::variant with boost::recursive_wrapper)
);

因为它给出了几个错误,一些 post说要调整一个提升头文件。

所以我使用另一种语法首先使用 :

去除评论
     qi::phrase_parse(input.begin()
,input.end()
,qi::char_ >> *qi::char_
, qi::space | "--" >> *(qi::char_ - qi::eol) >> qi::eol
,stripped // std::string
);

但这给了我一个删除了所有空格和注释的文本:

ABC:=121-XY1/7>45ORSS>=3ZY2AND(JKL*PQR)<75;JKL:=PP1ORPP2/2XORPP3;ZZ_1:=A-B>0XOR(B2%GH==6ANDSP==4NOTAX>GF<2ORC*AS2>=5);

所以,问题是我怎样才能只删除评论,保留空间和换行符?

使用:Boost 版本 1.55.0

最佳答案

缺少您的确切代码示例。请允许我向那个 "boolean expression grammar" 添加一个示例船长你链接到:

std::string const input = 
"a and\n"
"-- abacadabra\n"
"b;";

typedef std::string::const_iterator It;

// ADDED: allow comments
qi::rule<It> skip_ws_and_comments
= qi::space
| "--" >> *(qi::char_-qi::eol) >> qi::eol
;

parser<It, qi::rule<It> > p;

这就是所需的所有更改。输出:

result: (a & b)

查看 Live On Coliru

关于c++ - 使用 boost spirit 预处理自定义文本文件以删除注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21501497/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com