2012-01-09 12 views
0

マイATGファイルは次のようにブロックに遭遇は貪欲ではないとココ/ Rパーサーを取得する方法

Codeblock = "<#" {anychar} "#>" 

ように、コードブロックを定義しますピックアップ

a=5; 
print "Hello 

これは私が欲しいものです。しかし

、それはこのようなコードに出くわす:

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

トークンは、貪欲に拾っ

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

どのように私はココ/ Rは、これを実行しないように知らせることができますか? ";" で終わったanycharを作ることによって

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

答えて

0

はこれを試します"#> <#"

+0

をそれがセミコロンが含まれて私はすでにanychar 'anychar = ANY.'として定義されています。また、セミコロンはエンドラインとして使用されるため、任意の文字から除外することはできません。 – xbonez

+0

「ANY」が多すぎます。代わりに '' qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM ''を使用してください。 – coffeeground

+0

'anychar =(expression | procedure)"; " EOL = CHR(10)となる。 CHARACTERSセクション – coffeeground

0

あなたの端末はもっと明示的にする必要があります。

「ANYは」#><#が解析されている理由それはあなたの文法はコードブロックを定義しているかであることから、あなたのコードブロックは、「ANY」セットの一部としてFIRST <# and LAST #>の間のすべてを扱いますされ、あいまいさを紹介しています。

おそらく試してみてください。

code = codeblock {codeblock} EOF 
codeblock = "<#" {anychar} "#>" 
関連する問題