【发布时间】:2011-12-20 02:35:23
【问题描述】:
我最近一直在玩 boost::spirit::qi 并且一直在尝试编写我自己的(非常非常简单的)脚本语言来解析它。当我处理脚本中的 if 语句时,我遇到了麻烦。如果函数调用返回真,我需要解析器跳过部分输入。
例如,我将标记定义为接受变量名 (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
如果函数 compare 返回 true,我将如何跳过下一部分?
【问题讨论】:
-
这正是epsilon parser 的用途;你试过了吗?
-
不,我是 Boost 新手,从未见过。我已经查看了文档,但它有点令人困惑,你能给我一个如何使用它的例子吗?谢谢:)
-
“语义谓词”段落是相关示例。
-
我觉得这个问题有点愚蠢,但是这怎么能用来跳过部分输入呢?我正在阅读,因为当函数返回 false 时,它会引发解析错误。那怎么能用作条件呢?
-
通过在备选方案 (
|) 的一侧拥有eps分支,在备选方案的另一侧拥有其他东西(可能是 noop)。
标签: c++ boost boost-spirit boost-spirit-qi