ANTLR 3을 사용하고 있는데 질문이 있습니다. 입력시 오류가 발생하면 어떻게 다음 예상 토큰을 찾을 수 있습니까? 파서의 getErrorMessage (RecognitionException e, String [] tokenNames)를 오버라이드하려고했으나 오류가 발생했지만 다음 기대 토큰이 무엇인지 알 수 없습니다. 누구든지 도울 수 있다면. 미리 감사드립니다.다음 찾기 예상 토큰 오류가 발생하는 경우 ANTLR 3
0
A
답변
1
소리가 나는 것처럼 쉽지 않습니다. 그리고 꽤 자주 이러한 정보를 사용할 수 없습니다.
예를 들어 문법은 (1+2)
과 같이 괄호로 묶은 표현식과 일치 할 수 있습니다. 파서 지금 "(1+2"
을 구문 분석하려고하면
하는 MismatchedTokenException
는 그 expecting
속성 ')'
의 형태가 될 것이다 던져 질 것이다. 그래서, 그것은 쉬운 것입니다. 이 "1+2)"
을 구문 분석 할 때
MismatchedTokenException
다시 던져 질 것이다, 그러나 지금 파서는 그냥
1+2
같은 식을 구문 분석 할 것으로 예상 있기 때문에의
EOF
을 기대하고 불평합니다.
이 아니며은 "과거"의 어딘가에서
'('
을 잊어 버렸다고 말합니다.
따라서 파서에서 발생한 예외에서 예상 토큰을 추출 할 수있는 경우가 두 차례 있습니다. 대부분의 경우,이 정보를 직접 추출해야합니다 (많은 노력이 필요합니다). 파서에 의미있는 오류 메시지를 작성하는 것은 쉬운 일이 아닙니다! (적어도 복잡한 언어가 아닌 문법을 작성하는 것과 비교하면 안됨)
ANTLR's API docs을 통해 ANTLR에서 던져진 예외를 확인하고 파서 유효하지 않은 입력을 목적에 맞게 전달하고 reportError(...)
을 우선 적용하는 것이 좋습니다. 구문 분석기를 사용하여 어떤 예외가 던져 지는지 확인하십시오.
관련 문제
- 1. 여러 과제가있는 Antlr 토큰
- 2. ANTLR 3 구문 분석 - 일치하지 않는 문자 ... 예상 됨
- 3. VB.net에서 오류가 발생하는 경우
- 4. ftp 오류가 발생하는 경우
- 5. ANTLR 문법 토큰 문제 (ANTLR works)
- 6. ANTLR : 토큰 조합
- 7. mysql에서 구문 오류가 발생하는 경우
- 8. 예상 표현 ":"토큰
- 9. 오류 : 예상 ';' '<'토큰
- 10. 예상 ')'before ';'토큰
- 11. ANTLR - 암시 적 토큰 및 토큰
- 12. 셀에서 문자열이 Excel에서 발생하는 경우 찾기
- 13. @ 토큰 앞에서 @autoreleasepool 예상 표현
- 14. 전 ')'예상 ','토큰 G ++
- 15. 상수 예상 "{"before ")"토큰
- 16. 예상 클래스 이름이 '{'토큰
- 17. 예상 초기화 * 토큰
- 18. 예상 된 ";" "{"토큰?
- 19. ANTLR : 토큰 이름 가져 오기?
- 20. '||'앞에 예상 식 xcode의 토큰
- 21. SyntaxError : 예상 토큰 '}'및 WordPress
- 22. antlr 토큰 길이 및 오류 처리
- 23. 오류 : 예상 ','또는 '...'토큰 앞에 '>'토큰
- 24. C 헤더 파일 오류 : 예상 식별자 또는 '('토큰 '앞에'[ '토큰
- 25. 예상 클래스 이름 앞에 {토큰
- 26. 더 긴 토큰 내에서 토큰을 일치시키려는 ANTLR
- 27. ANTLR 3 모호성
- 28. antlr 3.0에서 오류가 발생했습니다.
- 29. ANTLR 구문 오류 예기치 않은 토큰 : +
- 30. ANTLR : 다시 쓰기 규칙의 토큰에 대한 토큰
이것은 특정 오류에 대해서만 가능하며 문법에 따라 다릅니다. –