如何让 Coco/R 解析器不贪婪
我的 ATG 文件定义了一个代码块,
Codeblock = "<#" {anychar} "#>"
当 Coco 生成的解析器遇到这样的块时:
<#
a=5;
print "Hello world!";
#>
令牌拾取
a=5;
print "Hello
这正是我想要的。
然而,当遇到这样的代码时:
<#
a=5;
print "Hello World";
#>
<#
b=5;
print "Foo Bar";
#>
The token, 贪婪地拿起
a=5;
print "Hello World";
#>
<#
b=5;
print "Foo Bar";
如何让 Coco/R 知道不要这样做?
My ATG file defines a code block as
Codeblock = "<#" {anychar} "#>"
When the Coco generated parser comes across a block like this:
<#
a=5;
print "Hello world!";
#>
The token picks up
a=5;
print "Hello
This is exactly what I want.
However, when it comes across code like this:
<#
a=5;
print "Hello World";
#>
<#
b=5;
print "Foo Bar";
#>
The token, greedily picks up
a=5;
print "Hello World";
#>
<#
b=5;
print "Foo Bar";
How can I let Coco/R know not to do this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
试试这个:
通过使anychar以“;”结尾那么 cocor 就不能错误地解析任何具有这种模式“#> <#”的字符
try this:
by making anychar ended with ";" then cocor cannot mistakenly parse anychar with this pattern "#> <#"
您的终端需要更加明确。
“ANY”引入了歧义,这就是解析
#><#
的原因,您的代码块会将 FIRST<# 和 LAST #>
之间的所有内容视为是集合“ANY”的一部分,因为这就是您的语法定义代码块的方式。也许尝试:
Your terminals need to be more explicit.
"ANY" introduces ambiguity which is why the
#><#
is being parsed, your codeblock will treat everything between the FIRST<# and LAST #>
as being part of the set "ANY" since that is how your grammar has defined a codeblock.Perhaps try: