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在整个语法中有其他地方.
| 归档时间: |
|
| 查看次数: |
152 次 |
| 最近记录: |