我的语法很简单,试图将'é'与令牌E_CODE相匹配。
我使用TestRig工具(使用-tokens选项)测试了它,但是解析器无法正确匹配它。
我的输入文件是用UTF-8编码的,没有BOM,我使用的是ANTLR 4.4版本。
其他人也可以检查一下吗?我在控制台上输出了这个输出:
第1:0行令牌识别错误:'Ă'
grammar Unicode;
stat:EOF;
E_CODE: '\u00E9' | 'é';
答案 0 :(得分:1)
我测试了语法:
grammar Unicode;
stat: E_CODE* EOF;
E_CODE: '\u00E9' | 'é';
如下:
UnicodeLexer lexer = new UnicodeLexer(new ANTLRInputStream("\u00E9é"));
UnicodeParser parser = new UnicodeParser(new CommonTokenStream(lexer));
System.out.println(parser.stat().getText());
以下内容打印到我的控制台:
éé<EOF>
使用4.2和4.3测试(在Maven Central中还没有4.4)。
查看the source我看到TestRig采用可选的-encoding
参数。你试过设置吗?
答案 1 :(得分:0)
您的语法文件未以utf8格式保存。 根据terence Parr的书,utf8是antlr接受作为输入语法文件的默认格式。