패닉 모드 오류 복구의 방법으로 대답을 찾았지만 버그도 있습니다. 내가 한 것은 문법을 편집하여 입력 파일의 줄에 누락 된 문자가 생기면 (위의 경우 세미콜론) 파서는 비슷한 문자를 찾을 때까지 계속 진행합니다. 이러한 유사한 문자를 동기화 토큰이라고합니다.
아래 예를 참조하십시오. 먼저 문법상의 모든 SEMICOLON 토큰을이 코드로 대체했습니다.
Semicolon()
그런 다음이 새 프로덕션 규칙을 추가하십시오.
void Semicolon() :
{}
{
try
{
<SEMICOLON>
} catch (ParseException e) {
Token t;
System.out.println(e.toString());
do {
t = getNextToken();
} while (t.kind != SEMICOLON && t!=null && t.kind != EOF);
}
}
비슷한 문자가없는 문자 파서 검색이 발생하면 문자를 찾은 후이를 호출 한 규칙으로 돌아갑니다.
예 : - 변수 선언에 세미콜론이없는 것으로 가정합니다.
int a=10 <--- no semicolon
그래서 파서가 세미콜론을 검색합니다. 어떤 점에서는 세미콜론을 찾습니다.
___(some code)__; method(param1);
그래서 위의 예 (이것은 세미콜론() 메소드를 호출 한 일이기 때문이다.)는 변수 선언 규칙에 반환 그러나 우리가 새로 발견 후 발견의 첫 번째 세미콜론을 찾은 후 세미콜론 인 함수 선언이 아니라 변수 선언.
누구든지이 문제를 해결할 방법을 제안 할 수 있습니까?