繁体   English   中英

如何使Coco / R解析器不贪婪

[英]How to get Coco/R parser to not be greedy

我的ATG文件将代码块定义为

Codeblock = "<#" {anychar} "#>"

当Coco生成的解析器遇到这样的块时:

<#
   a=5;
   print "Hello world!";
#>

代币领取

a=5;
print "Hello

这正是我想要的。

但是,当遇到这样的代码时:

<#
   a=5;
   print "Hello World";
#>
<#
   b=5;
   print "Foo Bar";
#>

令牌贪婪地捡起

 a=5;
 print "Hello World";
 #>
 <#
   b=5;
   print "Foo Bar";

如何让Coco / R知道不这样做?

尝试这个:

codeblock = "<#" {anychar} "#>" .
anychar = (expression|procedure) ";" .

通过使anychar以“;”结尾 那么cocor不会错误地使用此模式“#> <#”解析任何字符

您的终端需要更明确。

“ ANY”引入了歧义,这就是为什么解析#><#的原因,您的代码块会将FIRST <# and LAST #>之间的所有内容都视为集合“ ANY”的一部分,因为这就是语法定义代码块的方式。

也许尝试:

code = codeblock {codeblock} EOF
codeblock = "<#" {anychar} "#>"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM