2

与えられた文法

test    : 'test' ID '\n' 'begin' '\n'  'end' '\n' -> ^(TEST ID);

ID  :   ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*
    ;

およびのテスト文字列

"test blah\n begin\n end\n"

その結果

line 1:0 mismatched input 'test blah\\n begin\\n end\\n' expecting 'test'
<mismatched token: [@0,0:21='test blah\\n begin\\n end\\n',<12>,1:0], resync=test blah
 begin
 end
>

ここで何がうまくいかなかったのですか?

4

1 に答える 1

6

'\n'文法規則でを使用すると、abackslash+nではなく改行文字に一致します。また、入力には改行文字が含まれていないようですが、backslash+n.

testしたがって、私の推測では、ルールを次のように変更する必要があります。

test    
  : 'test' ID '\\n' 'begin' '\\n'  'end' '\\n'
  ;

解析ツリーの結果:

代替テキスト

または、testルールそのままにして、入力を次のように変更します。

test blah
begin
end

解析ツリーの結果:

代替テキスト

そうでない場合は、SSCCE を投稿していただけますか: このエラーを示す、私 (または他の誰かが実行できる) の小さくて完全に動作するデモ?

于 2010-12-22T08:56:06.220 に答える