作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在阅读 polux 伟大的来源 parsers ,发现有一个特殊的isCommitted
我无法理解的属性(property):
class ParseResult<A> {
final bool isSuccess;
final bool isCommitted;
/// [:null:] if [:!isSuccess:]
final A value;
final String text;
final Position position;
final Expectations expectations;
// ...
}
isSuccess
表示解析结果是否成功,为什么需要
isCommitted
?我试图阅读相关代码,但仍然不明白。
最佳答案
简短的回答是:不用担心 isCommited
, 仅供内部使用。
长答案是:您可以调用commited
在 paser 上,这意味着一旦成功,您肯定知道回溯是没有意义的(非常像 Prolog 的剪辑)。例如考虑这样的语法:
expr() => str('(') + rec(expr) str(')') ^ ...
| num()
"(..."
.一旦我们识别出括号,我们肯定知道如果
...
原来
不是 要成为一个 expr,没有必要倒退到字符串的开头并尝试解析一个 num,因为 num 无论如何都不会以括号开头。我们可以提前失败。这是通过标记
(
来完成的。作为“提交点”:
expr() => str('(').commited + rec(expr) str(')') ^ ...
| num()
|
的模块化。 .到目前为止,我个人从未使用过它。
commited
在解析器上,它返回一个新的解析器,其
isCommited
属性为真。然后被
|
使用来决定是否回溯。这就是
isCommited
是用来。作为最终用户,您永远不必关心。我可能应该将其设为私有(private)。
关于parsing - 如何理解 ParserResult 的 "isCommitted"属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22432617/
我正在阅读 polux 伟大的来源 parsers ,发现有一个特殊的isCommitted我无法理解的属性(property): class ParseResult { final bool i
我是一名优秀的程序员,十分优秀!