我什么时候可以使用期望运算符?

时间:2016-08-14 13:12:00

标签: c++ parsing c++14 boost-spirit boost-spirit-x3

我正在使用boost spirit x3进行解析。我完成了语法,解析器按预期解析。现在我想添加错误处理,所以我必须为我的语法添加期望点。 我的问题是,我何时可以使用期望运算符>而不是“后跟”运算符>>? 如果a > b永远不会出现在语法的另一部分中,我是否可以像a >> b一样使用它?

1 个答案:

答案 0 :(得分:6)

期望运算符实际上禁用了反向跟踪。如果b必须始终遵循a,那么现在是使用期望点的好时机:>。如果某些逻辑组合可能导致a后跟其他内容,则不应使用期望,而应使用>>

如果你的语法有其他选择,你需要特别注意你没有击败有效的回音曲目。

例如,如果您正在编写需要if语句的条件表达式在括号中的语言解析器,则有效语法可能包括:

if_statement = lit("if") > '(' > statement > ')';

if是关键字,必须后跟(。也许if(之间有空格,但关键字if必须后跟(

(注意:现实情况是语法比这更复杂。要使if成为关键字,它只能匹配以字母i和f开头的一些标记< / p>

如果您知道遇到规则,a > b必须始终跟a,您可以在语法中使用b。你可能在整个语法中的其他地方有一个a >> b