我如何在Treetop中做这样的事情?
/.+?;/
Run Code Online (Sandbox Code Playgroud)
这似乎是唯一的方法:
[^;]+ ';'
Run Code Online (Sandbox Code Playgroud)
哪种丑陋......还有其他方式吗?.+?似乎不起作用..
Luk*_*gli 10
默认情况下,PEG是贪婪和盲目的,这意味着他们尽可能多地输入,并且他们不考虑之后发生的事情:
S <- P1* P2 (贪婪,盲目)
通过使用有序选择(并且不使用前瞻),这可以非常容易地修复:
S <- P1 S / P2 (贪心,非盲)
S <- P2 / P1 S (懒惰,非盲)
我不知道 Treetop,但是可以吗/[^;]+;/?
通过快速搜索,我看到建议 Treetop 不执行贪婪或懒惰(非贪婪)量词,并且+实际上是一个所有格量词(由++其他正则表达式风格表示)。
如果是这种情况,我不确定除了否定类之外,您还有其他基于正则表达式的选项。