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

When exactly can I use the expectation operator?

本文关键字:运算符 期望 可以使 什么时候      更新时间:2023-10-16

我正在研究一个boost spirit x3的解析器。我完成了语法,解析器按预期进行了解析。现在我想添加错误处理,所以我必须在语法中添加期望点。我的问题是什么时候我可以使用期望算子>而不是"跟着"算子>> ?如果a >> b从来没有出现在语法的其他部分,我可以像a > b一样使用它吗?

期望操作符本质上禁止回溯。如果b必须紧跟a,那么使用期望点>是一个好时机。如果存在某种逻辑组合,可能导致a后面跟着其他内容,则不应该使用期望,而应该使用>>

如果您的语法中有可选择的,您将需要特别注意您没有破坏有效的回溯。

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

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

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

(注意:实际情况是语法比这更复杂一些。要使if成为关键字,它不能只匹配以字母i和f)

开头的令牌

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