grun无法识别ANTLR4 Unicode解析

问题描述

给出以下内容

grammar Lang
start: CHAR;
CHAR: [\uE001];
WS: [ \t\r\n]+ -> skip;

此批处理文件运行时:

@echo off
setlocal
call antlr4 -o .\javatarget LangFile.g4 -encoding UTF-8
cd .\javatarget
call javac LangFile*.java
call grun LangFile Lang -gui -diagnostics -trace -encoding UTF-8
endlocal
@echo on

当我粘贴Unicode字符时会发生此错误


^Z
line 1:0 token recognition error at: '?'
enter   Lang,LT(1)=<EOF>
consume [@0,3:2='<EOF>',<-1>,2:0] rule Lang 
exit    Lang,LT(1)=<EOF>

尽管我搜索了其他答案(例如-encoding选项),但似乎无法使这种Unicode(专用区域)解析正常工作。

编辑:我的版本是4.8。

问题似乎出在grun工具上。使用Python手动运行它可以很好地运行,指定输入文件也可以。但是直接将内容粘贴到控制台失败。对我来说,恢复使用输入文件已经足够了,但是当grun的直接输入模式起作用时,也许可以回答这个问题。

解决方法

您的grun脚本如何处理输入可能是一个问题,因为当我生成一个词法分析器和解析器并运行它时:

LangLexer lexer = new LangLexer(CharStreams.fromString("\uE001"));
LangParser parser = new LangParser(new CommonTokenStream(lexer));

parser.start();

它解析时没有任何警告或错误。