プレーンテキスト内のHTMLブロックレベルの要素を認識するためにANTLR文法を書いています。divタグに限定された関連スニペットは次のとおりです。
grammar Test;
blockElement
: div
;
div
: '<' D I V HTML_ATTRIBUTES? '>' (blockElement | TEXT)* '</' D I V '>'
;
D : ('d' | 'D') ;
I : ('i' | 'I') ;
V : ('v' | 'V') ;
HTML_ATTRIBUTES
: WS (~( '<' | '\n' | '\r' | '"' | '>' ))+
;
TEXT
: (. | '\r' | '\n')
;
fragment WS
: (' ' | '\t')
;
TEXTトークンは、プレーンテキストやインラインタグ(例)など、ブロックレベルの要素ではないものを表すことになっています<b><\b>
。ネストされたブロック要素でテストすると、次のようになります。
<div level_0><div level_1></div></div>
それらを正しく解析します。ただし、ランダムなテキストを追加するとすぐに、最初のTEXTトークンを消費した直後にMismatchedTokenException(0!= 0)がスローされます(例:大文字のT )。
<div level_0>This is some random text</div>
助言がありますか?私は概念的に間違ったことをしていますか?私はANTLRv。3.2を使用しており、ANTLRWorksv。1.4でテストを行っています。
ありがとうございました