[英]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.