如果函数调用返回 true,则跳过 boost::spirit::qi 中的部分输入

发布于 2024-12-22 04:29:51 字数 471 浏览 4 评论 0原文

我最近一直在玩 boost::spirit::qi 并一直在尝试编写我自己的(非常非常简单)它将解析的脚本语言。当我处理脚本中的 if 语句时,我遇到了麻烦。如果函数调用返回 true,我需要解析器跳过部分输入。

例如,我将标记定义为接受变量名称 (a-zA-Z_) 并将比较设置为接受“>”或“<”。代码示例如下。

comparison_statement = token >> comparison >> token;
statement            = lit("if ") >> comparison_statement[&compare] >> "then";

qi::phrase_parse(first, last, script, space);  // This call the parser

如果函数比较返回 true,我将如何跳过下一部分?

I've been playing around with boost::spirit::qi lately and have been trying to write my own (very, very simple) scripting language which it will parse. I've had trouble when I've got to the if statements in the script. I need the parser to skip parts of the input if a function call comes back true.

For example, I have token defined as to accept variable names (a-zA-Z_) and comparison set to accept ">" or "<". An example of the code is below.

comparison_statement = token >> comparison >> token;
statement            = lit("if ") >> comparison_statement[&compare] >> "then";

qi::phrase_parse(first, last, script, space);  // This call the parser

How would I go about skipping the next section if the function compare comes back true?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

会傲 2024-12-29 04:29:53

解析器中的条件可以使用 Epsilon 解析器。这将调用您提供给它的函数,如果该函数返回 false,则该特定检查将失败并继续进行下一个或。

例如:

qi::rule<Iterator, std::string(), ascii::space_type> rool;
rool = a | b | eps(f) | d

A conditional within the parser can be written by using the Epsilon Parser. This will call the function you supply to it and if that function returns false will fail that particular check and go on to the next or.

For example:

qi::rule<Iterator, std::string(), ascii::space_type> rool;
rool = a | b | eps(f) | d
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文