我正在开发一个带有 boost spirit x3 的解析器。我完成了语法,解析器按预期解析。现在我想添加错误处理,所以我必须在我的语法中添加期望点。我的问题是我什么时候可以使用期望运算符>
而不是“跟随”运算符>>
?我只能像在语法的另一部分从未发生过一样使用它a > b
吗a >> b
?
问问题
165 次
1 回答
6
期望运算符本质上禁用了回溯。如果b
一定要一直跟着a
,那就是使用期望点的好时机:>
。如果有某种逻辑组合可能导致 ana
后面跟着其他东西,则不应使用期望,而应使用>>
.
如果您的语法有替代方案,您将需要特别注意您没有击败有效的后退曲目。
例如,如果您正在编写一个语言解析器,它要求 if 语句的条件表达式放在括号中,则有效的语法可能包括:
if_statement = lit("if") > '(' > statement > ')';
if
是关键字,后面必须跟一个(
. 可能 and 之间有空格if
,(
但关键字if
后面必须跟一个(
.
(注意:实际情况是语法比这复杂一点。要if
成为关键字,它不能只匹配以字母 i 和 f 开头的某个标记)
a > b
如果您在遇到规则时知道 aa
必须始终后跟 a ,则可以在语法中使用b
。您可能a >> b
在整体语法中有其他地方。
于 2016-08-15T00:13:57.693 回答