2

私は ANTLR が初めてで、ANTLRWorks1.4.3 で次の文法を試しています。

grammar TextGra;
element :   starttag (element)* endtag
;
starttag:   '<' TAGNAME '>';
endtag  :   '</' TAGNAME '>';
TAGNAME :   ('a'..'z')|('A'..'Z')|('0'..'9');
WS  :   (' '|'\r'|'\n')+ {skip();} ;

このような単純なxmlフラグメントを解析しようとすると

<a><b><c></c></b></a>

最後の 2 つの endtag 要素が失われました。この状況を処理するにはどうすればよいですか? またはそれは間違った方法ですか?私の状況ではタグ名を制約することはできません 他の xml 解析コードと比較してください。または、文法は $0 を使用して以前に一致したトークンを参照できますか?(正規表現のように)。この場合、前に一致した開始タグによって終了タグのタグ名を決定します。回答ありがとうございます。

4

1 に答える 1

1

ANTLRWorks のインタープリターを使用していると思いますが、バグがあるので使用しないでください。常に ANTLRWorks に含まれているデバッガーを使用してください (デバッガーを開始するにはCTRL+Dを押します)。

私はあなたの文法や入力を変更しませんでした.これがインタープリターが生成したものです:

ここに画像の説明を入力

そして、デバッガーはこれを生成しました:

ここに画像の説明を入力

于 2012-11-01T07:25:30.690 に答える