我正在编写一个 ANTLR 语法来识别纯文本中的 HTML 块级元素。这是一个相关的片段,仅限于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>
有什么建议么?我在做一些概念上的错误吗?我正在使用 ANTLR v. 3.2 并使用 ANTLRWorks v. 1.4 进行测试。
谢谢