1

我的 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 知道不要这样做?

4

2 回答 2

0

尝试这个:

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

通过使 anychar 以“;”结尾 那么 cocor 不能错误地用这种模式解析 anychar "#> <#"

于 2012-01-11T07:52:58.470 回答
0

您的终端需要更加明确。

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

也许尝试:

code = codeblock {codeblock} EOF
codeblock = "<#" {anychar} "#>"
于 2012-03-28T13:15:04.410 回答