【发布时间】:2012-10-17 04:38:06
【问题描述】:
我读过的所有内容都表明 Treetop 会像正则表达式一样回溯,但我很难做到这一点。
假设我有以下语法:
grammar TestGrammar
rule open_close
'{' .+ '}'
end
end
这与字符串 {abc} 不匹配。我怀疑这是因为.+ 正在消耗从a 开始的所有内容。 IE。当我只希望它消耗 abc 时,它正在消耗 abc}。
这似乎与类似的正则表达式不同。正则表达式 /{.+}/ 将匹配 {abc}。据我了解,这是可能的,因为正则表达式引擎在使用结束 } 作为 .+ 的一部分后回溯,然后无法匹配。
那么 Treetop 可以这样回溯吗?如果有,怎么做?
我知道您可以使用否定来匹配“} 以外的任何内容”。但这不是我的本意。假设我希望能够匹配字符串{ab}c}。在这种情况下,我想要的标记是开头{、ab}c 的中间字符串和结尾}。这是一个人为的例子,但是当使用像 {a b {c d}} 这样的嵌套表达式时,它变得非常相关。
【问题讨论】: