给出以下内容:
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的直接输入模式起作用时,也许可以回答这个问题。
答案 0 :(得分:0)
您的grun
脚本如何处理输入可能是一个问题,因为当我生成一个词法分析器和解析器并运行它时:
LangLexer lexer = new LangLexer(CharStreams.fromString("\uE001"));
LangParser parser = new LangParser(new CommonTokenStream(lexer));
parser.start();
它解析时没有任何警告或错误。