boost :: spirit :: qi :: parse()和boost :: spirit :: qi :: phrase_parse()有何区别?

时间:2020-03-19 23:39:27

标签: boost-spirit-qi

我是戚的新手。

我的目标是使用spirit :: qi创建CLI解析器。 “ CLI解析器”不是指处理命令行选项的类型(例如app --help),而是指处理用户键入的命令的类型。

示例:

CLI> vacuum on
vacuum solenoid energized
CLI> 

我一直在研究许多精神::气的例子,并试图理解气。我看到qi提供了两个类似的API:qi :: parse()和qi :: phrase_parse()。我检查过的示例代码使用了这两种API,但我还不了解它们之间的区别。

换句话说,我认为每个API都专门用于解决特定的解析任务,但是当尝试选择其中一个API来解决特定的解析问题时,我不理解,我应该选择哪个。

我先谢谢了。

1 个答案:

答案 0 :(得分:1)

“直接”解析API不接受跳过程序,而phrase_parse则接受。

船长是第二个解析器表达式,它描述了在词素之外要忽略的输入序列(例如空格或注释,但不限于此)。

要了解船长的行为,请参见例如Boost spirit skipper issues

特别是它将显示您可以将parse()与内部使用了船长的语法配合使用,因为

ok = phrase_parse(f, l, grammar, skipper, attr);

大致等同于在内部定义它的“更智能”语法:

ok = parse(f, l, qi::skip(skipper)[grammar], attr);

实际上,我会说在99%的情况下,这是正确的方法,因为船长通常是解析器的属性,不能/不应更改。遗憾的是,由于历史原因,文档示例经常使用phrase_parse


奖金

有关命令语法分析的一些示例:

相关问题