我正在爲學校開展一個項目。我們正在製作一個靜態代碼分析器。 對此的一個要求是分析Java中的C#代碼,這對於ANTLR來說是非常好的。如何使用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。我認爲它無法讀取編碼流。所以我打開記事本+ +和我改變了每個文件的編碼爲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 ++會做什麼?
我不確定像Pastebin這樣的網站是否保持正確的編碼。但這裏是一個例子:http://pastebin.com/ji8AHcRN –