Antlr HTML子集语法中不匹配的TokenException
我正在编写一个ANTLR语法来识别纯文本中的HTML块级元素。下面是一个相关的片段,仅限于div标记: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
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 '</'