Parsing 如何让Coco/R解析器不贪婪

Parsing 如何让Coco/R解析器不贪婪,parsing,lexical-analysis,parser-generator,cocor,Parsing,Lexical Analysis,Parser Generator,Cocor,我的ATG文件将代码块定义为 Codeblock = "<#" {anychar} "#>" 这正是我想要的 但是,当遇到这样的代码时: <# a=5; print "Hello world!"; #> <# a=5; print "Hello World"; #> <# b=5; print "Foo Bar"; #> 代币,贪婪地拾起 a=5; print "Hello World"; #&g

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

Codeblock = "<#" {anychar} "#>"
这正是我想要的

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

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

代币,贪婪地拾起

 a=5;
 print "Hello World";
 #>
 <#
   b=5;
   print "Foo Bar";
a=5;
打印“你好世界”;
#>
试试这个:

codeblock = "<#" {anychar} "#>" .
anychar = (expression|procedure) ";" .
codeblock=”“。
anychar=(表达式|过程)“;”。

通过使anychar以“;”结尾,cocor就不能错误地用这种模式解析anychar“#>您的终端需要更加明确


“ANY”引入了歧义,这就是为什么
#>我已经将anychar定义为
anychar=ANY.
,这样就包括了分号。而且,由于分号用作尾行,我不能将其从anychar中排除。
ANY
太多了。使用
qwertyuiopasdfghjklzxcvnmqwertyuiopasdfghjklzxcvnm“
取而代之。
anychar=(表达式|过程)”;“EOL.
其中字符部分中的'EOL=CHR(10)。”
codeblock = "<#" {anychar} "#>" .
anychar = (expression|procedure) ";" .
code = codeblock {codeblock} EOF
codeblock = "<#" {anychar} "#>"