我正在使用boost spirit x3进行解析。我完成了语法,解析器按预期解析。现在我想添加错误处理,所以我必须为我的语法添加期望点。
我的问题是,我何时可以使用期望运算符>
而不是“后跟”运算符>>
?
如果a > b
永远不会出现在语法的另一部分中,我是否可以像a >> b
一样使用它?
答案 0 :(得分:6)
期望运算符实际上禁用了反向跟踪。如果b
必须始终遵循a
,那么现在是使用期望点的好时机:>
。如果某些逻辑组合可能导致a
后跟其他内容,则不应使用期望,而应使用>>
。
如果你的语法有其他选择,你需要特别注意你没有击败有效的回音曲目。
例如,如果您正在编写需要if语句的条件表达式在括号中的语言解析器,则有效语法可能包括:
if_statement = lit("if") > '(' > statement > ')';
if
是关键字,必须后跟(
。也许if
和(
之间有空格,但关键字if
必须后跟(
。
(注意:现实情况是语法比这更复杂。要使if
成为关键字,它只能匹配以字母i和f开头的一些标记< / p>
如果您知道遇到规则,a > b
必须始终跟a
,您可以在语法中使用b
。你可能在整个语法中的其他地方有一个a >> b
。