- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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
。
关于c++ - 我究竟什么时候可以使用期望运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38942583/
Feel free to skip straight to TL/DR if you're not interested in details of the question 简短的序言: 我最近决定
我一直在阅读 A Tour of Go学习Go-Lang到目前为止一切顺利。 我目前在 Struct Fields类(class),这是右侧的示例代码: package main import "fm
Last time I got confused顺便说一下PowerShell急切地展开集合,基思总结了它的启发式如下: Putting the results (an array) within a
我是一名优秀的程序员,十分优秀!