Parsing 如何让Coco/R解析器不贪婪
我的ATG文件将代码块定义为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
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} "#>"