2012-07-10 3 views
1

을 입력ANTLR 오류가 나는 즉시 내가 처음 따옴표 (")를 입력 할 때 오류가 내 ANTLR 정의 언어를 사용하여 내 자바 편집기에서 문자열을 입력 할 때 문자열

입력 :.

StatusString = "; 
    break; 

오류 :

java.lang.IllegalStateException: Lexer [email protected] 
    returned null token but lexerInput.readLength()=21 
    lexer-state: null 
    tokenStartOffset=557, readOffset=578, lookaheadOffset=579 
    Chars: "";\n  break;\n}\n\n" - these characters need to be tokenized. 
Fix the lexer to not return null token in this state. 

내가 때문에 난 내 이쁜 리터럴 내 문자열을 정의하는 방법이다 의심 mmer.

문법 정의

STRING_LITERAL 
    : '"' (EscapeSequence | ~('\\'|'"'))* '"' {setText(getText().substring(1, getText().length()-1));} 
    ; 

fragment 
EscapeSequence 
    : '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\') 
    | OctalEscape 
    ; 

내가 무슨 일이 일어나고 있는지 의심은 처음 견적을보고 즉시로 문자열을 추출하기 위해 노력하고 있다는 점이다. 이것은 렉서 (lexer)를 사용하여 구문을 코딩하는 IDE이기 때문에 실시간으로 수행됩니다. 이 오류를 방지하기 위해 문법을 사용할 수 있습니까?

편집 : 내가 생각한 것은 줄 끝까지 확인해야한다는 것입니다. IDE는 netbeans 또는 eclipse와 같이 사용자가 따옴표를 완성 할 때까지 오렌지색을 인용 부호에서 시작하여 색칠합니다. Im은 문법을 통해 문법을 통해 어휘 교환/파서에 반영되도록하는 방법을 모르겠습니다.

답변

1

오류를 방지하려고한다면 오류를 놓치지 마세요. 시작 견적을 입력했을 때뿐만 아니라

IDE를 몇 밀리 초 (1/2 초 정도) 기다려서 닫는 인용 부호를 입력 할 시간을 갖게하거나 IDE가 자동으로 닫는 인용 부호를 삽입하게하여이 문제를 해결할 수 있습니까?

잘못된 입력을 허용하도록 문법을 조정하려는 시도는 좋은 생각이 아닙니다. IMO.

+0

내가 생각한 것은 줄 끝까지 확인해야했습니다. IDE는 netbeans 또는 eclipse처럼 견적이 완료 될 때까지 견적에서 시작하는 오렌지 색을 색칠합니다. Im은 문법을 통해이 점에 대해 어떻게 확신 할 수 없으므로 렉서/파서 – merjr

+0

@merjr에 다시 반영됩니다. 다시 말해 문법에서는 아니지만 IDE에서는 어떤 방식 으로든이 작업을 수행합니다. –

+0

적어도 문자열 리터럴 선언이 정확합니까? 오류는 기술적으로 다른 "코드에서 찾을 수 있기 때문에 나를 던지고있다. 그래서이 한 인스턴스에 실제로 문자열을 완료하지만 그 오류가 여전히 생성됩니다. – merjr