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 に答える