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

Exa*_*gon 1 c++ parsing boost-spirit c++14 boost-spirit-x3

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

小智 6

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

如果你的语法有其他选择,你需要特别注意你没有击败有效的后退音轨.

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

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

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

(注意:实际情况是语法比那更复杂.为了if成为一个关键字,它不能只匹配一些以字母i和f开头的标记)

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