c# - 如何使用 ANTLR 获得正确的编码?

标签 c# java encoding antlr ansi

我正在为学校做一个项目。我们正在制作一个静态代码分析器。 对此的要求是用 Java 分析 C# 代码,到目前为止,ANTLR 的进展非常顺利。

我制作了一些示例 C# 代码,以便在 Visual Studio 中使用 ANTLR 进行扫描。我分析了解决方案中的每个 C# 文件。但这不起作用。我收到内存泄漏和错误消息:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at org.antlr.runtime.Lexer.emit(Lexer.java:151)
    at org.antlr.runtime.Lexer.nextToken(Lexer.java:86)
    at org.antlr.runtime.CommonTokenStream.fillBuffer(CommonTokenStream.java:119)
    at org.antlr.runtime.CommonTokenStream.LT(CommonTokenStream.java:238)

过了一会儿我以为是编码问题,因为所有文件都是UTF-8。我认为它无法读取编码的流。所以我打开Notepad++并将每个文件的编码更改为ANSI,然后它就工作了。我不太明白 ANSI 的含义,这是一种字符集还是某种组织?

我想将编码从任何编码(可能是 UTF-8)更改为 ANSI 编码,这样我就不会再出现内存泄漏了。

这是生成词法分析器和解析器的代码:

InputStream inputStream = new FileInputStream(new File(filePath));
CharStream charStream = new ANTLRInputStream(inputStream);
CSharpLexer cSharpLexer = new CSharpLexer(charStream);
CommonTokenStream commonTokenStream = new CommonTokenStream(cSharpLexer);
CSharpParser cSharpParser = new CSharpParser(commonTokenStream);
  • 有人知道如何将InputStream的编码更改为正确的编码吗?
  • 当我将编码更改为 ANSI 时,Notepad++ 会做什么?

最佳答案

读取文本文件时,您应该明确设置编码。尝试进行以下更改的示例

CharStream charStream = new ANTLRInputStream(inputStream, "UTF-8");

关于c# - 如何使用 ANTLR 获得正确的编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10430901/

相关文章:

java - Android:如何从 Activity 类将多个值传递给 setContentView() 方法?

java - 从 Cassandra 读取 timeuuid 值 - 使用 DataStax 连接器

java - Tapestry 中的表单编码

c# - 通过 C# 访问 Azure DevOps 工作元素

java - try-finally 语法中的 NPE

c# - 如何从 VS 运行 Excel 宏?

C# 将字符串转换为字节,然后使用默认编码器返回字符串会破坏字符串

c# - 在 C# 中将字符串 (UTF-16) 转换为 UTF-8

c# - Windows Media Player (11+) C# 插件

c# - 如何使用变量作为类型