ANTLR4 CSharp Lexer使用unicode源代码文件生成错误

ANTLR4 CSharp Lexer使用unicode源代码文件生成错误,antlr,antlr4,Antlr,Antlr4,我正在使用CSharp Java目标-我正在解析一些CSharp代码,如下所示: List<Token> codeTokens = new ArrayList<Token>(); List<Token> commentTokens = new ArrayList<Token>(); //CharStream cs = CharStreams.fromString(contents); CharStream cs = CharStreams.from

我正在使用CSharp Java目标-我正在解析一些CSharp代码,如下所示:

List<Token> codeTokens = new ArrayList<Token>();
List<Token> commentTokens = new ArrayList<Token>();
//CharStream cs = CharStreams.fromString(contents);
CharStream cs = CharStreams.fromPath(path);
CSharpLexer lexer = new CSharpLexer(cs);
// recognition error happens here: 
List<? extends Token> tokens = lexer.getAllTokens();
List<Token> directiveTokens = new ArrayList<Token>();
ListTokenSource directiveTokenSource = new ListTokenSource(directiveTokens);
CommonTokenStream directiveTokenStream = new CommonTokenStream(directiveTokenSource, CSharpLexer.DIRECTIVE);
CSharpPreprocessorParser preprocessorParser = new CSharpPreprocessorParser(directiveTokenStream);
我是否需要以不同的方式配置Lexer?错误来自Lexer.java=>getAllTokens()=>nextToken()=>get解释器().match(\u输入,\u模式)

同样,即使是一个空的UNICODE编码文件,我也会得到这个结果,但它仍然包含U+FEFF字符:

$ less ApiUserInfo.cs
<U+FEFF>
ApiUserInfo.cs (END)
$ApiUserInfo.cs
ApiUserInfo.cs(完)
多谢各位
Angel

您需要使用一个编辑器,该编辑器的开头不包含字节顺序标记。你知道你使用的是哪种Unicode序列化吗?我建议使用UTF-8,它不应该带有BOM表(尽管Windows的记事本确实添加了一个),我通过将此规则添加到CSharp Lexer中来修复它:BYTE_ORDER_MARK:“\u00EF\u00BB\u00BF”;物料清单:'\uFEFF'{skip();};事实上,FEFF是UTF-16:)前一个(第一行)是UTF-8。非常感谢。
$ less ApiUserInfo.cs
<U+FEFF>
ApiUserInfo.cs (END)