我如何在Treetop中做这样的事情呢?
/.+?;/看起来唯一的办法就是:
[^;]+ ';'这有点丑陋..还有别的办法吗?.+?似乎不起作用..
发布于 2010-02-09 06:01:45
默认情况下,PEGs是贪婪和盲目的,这意味着它们会尽可能多地获取输入,并且不会考虑随后会发生什么:
S <- P1* P2 (贪婪、盲目)
不过,通过使用有序选择(而不使用lookahead)可以相当容易地解决这个问题:
S <- P1 S / P2 (贪婪,非盲目)
S <- P2 / P1 S (懒惰的,非盲的)
发布于 2009-07-03 05:26:23
好吧,我知道钉子是贪婪的,这是没有办法的。Lookahead可以用来模仿这种行为,比如!(';' .)
发布于 2009-06-25 22:20:48
我不知道Treetop,但是/[^;]+;/可以工作吗?
通过快速搜索,我发现Treetop既不做贪婪也不做懒惰(非贪婪)量词,+实际上是一个所有格量词(在其他正则表达式中用++表示)。
如果是这种情况,我不确定除了被否定的类之外,还有没有其他基于regex的选项。
https://stackoverflow.com/questions/1045932
复制相似问题