Antlr HTML子集语法中不匹配的TokenException

Antlr HTML子集语法中不匹配的TokenException,antlr,antlrworks,Antlr,Antlrworks,我正在编写一个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_ATT

我正在编写一个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')
  ;
语法测试;
块状元素
:div
;
div
:''(块元素|文本)*''
;
D:(‘D’|‘D’);
I:(‘I’|‘I’);
V:(‘V’|‘V’);
HTML_属性

:WS(~('我建议不要使用AntlWorks测试语法:控制台中很容易丢失错误消息,因此它可能会解释测试输入,而不是您所期望的。使用自定义创建的类执行此操作,如下所示:

import org.antlr.runtime.*;

public class Main {
    public static void main(String[] args) throws Exception {
        ANTLRStringStream in = new ANTLRStringStream("<div level_0>This is some random text</div>");
        TestLexer lexer = new TestLexer(in);
        CommonTokenStream tokens = new CommonTokenStream(lexer);
        TestParser parser = new TestParser(tokens);
        Sparser.parse());
    }
}
已经匹配了
\r
\n
,因此它应该是:

TEXT
  :  .
  ;
更改此选项时,您可以创建解析器&lexter,编译所有.java文件并运行主类:

java -cp antlr-3.2.jar org.antlr.Tool Test.g javac -cp antlr-3.2.jar *.java java -cp .:antlr-3.2.jar Main java-cp antlr-3.2.jar org.antlr.Tool Test.g javac-cp antlr-3.2.jar*.java java-cp.:antlr-3.2.jar Main 这将产生以下错误:

line 1:15 mismatched input 'i' expecting '</'

第1:15行输入不匹配“我”期待“谢谢,在涉及优先级规则时,我似乎误解了一些基本原则。回到参考我去!同样,感谢你的提议,但我想我需要在重新开始之前更好地介绍一些基本原则。
line 1:15 mismatched input 'i' expecting '</'