Antlr4无法正确识别unicode字符

时间:2014-10-24 13:57:29

标签: antlr4

我的语法很简单,试图将'é'与令牌E_CODE相匹配。 我使用TestRig工具(使用-tokens选项)测试了它,但是解析器无法正确匹配它。 我的输入文件是用UTF-8编码的,没有BOM,我使用的是ANTLR 4.4版本。 其他人也可以检查一下吗?我在控制台上输出了这个输出:
第1:0行令牌识别错误:'Ă'

grammar Unicode;

stat:EOF;  
E_CODE: '\u00E9' | 'é';

2 个答案:

答案 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接受作为输入语法文件的默认格式。