2012-05-03 4 views
1

저는 학교 프로젝트를하고 있습니다. 우리는 정적 코드 분석기를 만들고 있습니다. 이 요구 사항은 Java에서 C# 코드를 분석하는 것인데, 이는 ANTLR에서 지금까지 매우 훌륭하게 진행되고 있습니다.ANTLR을 사용하여이 인코딩을 어떻게 얻을 수 있습니까?

Visual Studio에서 ANTLR로 스캔 할 몇 가지 예제 C# 코드를 만들었습니다. 솔루션의 모든 C# 파일을 분석합니다. 그러나 그것은 효과가 없습니다. 모든 파일이 UTF-8에 있기 때문에, 나는 그것이 인코딩에 문제라고 생각 잠시 후

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) 

: 나는 메모리 누수 및 오류 메시지를 받고 있습니다. 인코딩 된 스트림을 읽을 수 없다고 생각합니다. 그래서 나는 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 ++에서 무엇을합니까?
+0

Pastebin과 같은 사이트가 올바른 인코딩을 유지하는지 잘 모르겠습니다. 하지만 여기에 예제가 있습니다 : http://pastebin.com/ji8AHcRN –

답변

-1

당신에게 예를보십시오 나는 한 BufferedStream에 ImputStream을 넣어이 문제를 해결하고 바이트 순서 표시를 제거했습니다.

인코딩을 명시 적으로 시도했기 때문에 내 파서가 해당 인코딩을 좋아하지 않았을 것입니다.

1

텍스트 파일을 읽을 때 인코딩을 명시 적으로 설정해야합니다. 다음과 같이 변경

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

+0

ANTLR4에 대한 대답을 여기에 추가했습니다. http://stackoverflow.com/questions/28126507/antlr4-using-non-ascii-characters-in-token-rules/28129510#28129510 –

관련 문제