我将如何在 Treetop 中做这样的事情?
/.+?;/
似乎唯一的方法是:
[^;]+ ';'
哪一种丑陋..还有其他方式吗?.+?
好像不行。。
默认情况下,PEG 是贪婪和盲目的,这意味着它们会尽可能多地吃输入,并且不会考虑之后会发生什么:
S <- P1* P2
(贪婪,盲目)
尽管通过使用有序选择(并且不使用前瞻),这可以相当容易地解决:
S <- P1 S / P2
(贪婪,非盲)
S <- P2 / P1 S
(懒惰,非盲)
好吧,我了解到 PEG 是贪婪的,而且没有办法绕过它。不过,前瞻可以用来模仿这种行为,比如!(';' .)
我不知道Treetop,但会/[^;]+;/
工作吗?
通过快速搜索,我看到了 Treetop 不做贪婪或懒惰(非贪婪)量词的建议,并且+
实际上是一个所有格量词(由++
其他正则表达式风格表示)。
如果是这种情况,我不确定您是否有除否定类之外的任何其他基于正则表达式的选项。