4

我将如何在 Treetop 中做这样的事情?

/.+?;/

似乎唯一的方法是:

[^;]+ ';'

哪一种丑陋..还有其他方式吗?.+?好像不行。。

4

3 回答 3

11

默认情况下,PEG 是贪婪和盲目的,这意味着它们会尽可能多地吃输入,并且不会考虑之后会发生什么:

S <- P1* P2(贪婪,盲目)

尽管通过使用有序选择(并且不使用前瞻),这可以相当容易地解决:

S <- P1 S / P2(贪婪,非盲)

S <- P2 / P1 S(懒惰,非盲)

于 2010-02-08T22:01:45.073 回答
1

好吧,我了解到 PEG 是贪婪的,而且没有办法绕过它。不过,前瞻可以用来模仿这种行为,比如!(';' .)

于 2009-07-03T05:26:22.593 回答
0

我不知道Treetop,但会/[^;]+;/工作吗?


通过快速搜索,我看到了 Treetop 不做贪婪或懒惰(非贪婪)量词的建议,并且+实际上是一个所有格量词(由++其他正则表达式风格表示)。

如果是这种情况,我不确定您是否有除否定类之外的任何其他基于正则表达式的选项。

于 2009-06-25T22:20:47.980 回答