我是戚的新手。
我的目标是使用spirit :: qi创建CLI解析器。 “ CLI解析器”不是指处理命令行选项的类型(例如app --help),而是指处理用户键入的命令的类型。
示例:
CLI> vacuum on
vacuum solenoid energized
CLI>
我一直在研究许多精神::气的例子,并试图理解气。我看到qi提供了两个类似的API:qi :: parse()和qi :: phrase_parse()。我检查过的示例代码使用了这两种API,但我还不了解它们之间的区别。
换句话说,我认为每个API都专门用于解决特定的解析任务,但是当尝试选择其中一个API来解决特定的解析问题时,我不理解,我应该选择哪个。
我先谢谢了。
答案 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
奖金
有关命令语法分析的一些示例: