我读过的所有内容都表明 Treetop 会像正则表达式一样回溯,但我很难做到这一点。
假设我有以下语法:
grammar TestGrammar
rule open_close
'{' .+ '}'
end
end
这与字符串不匹配{abc}
。我怀疑那是因为从这封信开始.+
就消耗了一切。a
即abc}
当我只希望它消费时它正在消费abc
。
这似乎与类似的正则表达式不同。正则表达式/{.+}/
将匹配{abc}
。据我了解,这是可能的,因为正则表达式引擎在将关闭}
作为 的一部分使用后回溯.+
,然后无法匹配。
那么 Treetop 可以这样回溯吗?如果是这样,怎么做?
我知道您可以使用否定来匹配“除 a 之外的任何内容}
”。但这不是我的本意。假设我希望能够匹配字符串{ab}c}
。在这种情况下,我想要的标记是开头{
、中间字符串ab}c
和结尾}
。这是一个人为的示例,但在使用嵌套表达式(如{a b {c d}}
.