2012-03-10 3 views
0

오류를 감지 한 후에도 입력 파일을 더 구문 분석 할 수있는 방법이 javacc에 있습니까? 패닉 모드 복구, 구문 수준 복구 등 여러 가지 방법이 있다는 것을 알아야합니다. 하지만 javacc jjt 파일에서 구현하는 방법을 이해할 수 없습니다. 예를 들어 내 입력 파일이Javacc에서 여러 오류 복구

Line 1: int i 
Line 2: int x; 
Line 3: int k 

가정 그래서 1 호선에서 실종 세미콜론의 에러를 검출 한 후, 분석을 진행하고도 3 행에서 오류를 찾기 원하는.

답변

0

패닉 모드 오류 복구의 방법으로 대답을 찾았지만 버그도 있습니다. 내가 한 것은 문법을 편집하여 입력 파일의 줄에 누락 된 문자가 생기면 (위의 경우 세미콜론) 파서는 비슷한 문자를 찾을 때까지 계속 진행합니다. 이러한 유사한 문자를 동기화 토큰이라고합니다.

아래 예를 참조하십시오. 먼저 문법상의 모든 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); 

그래서 위의 예 (이것은 세미콜론() 메소드를 호출 한 일이기 때문이다.)는 변수 선언 규칙에 반환 그러나 우리가 새로 발견 후 발견의 첫 번째 세미콜론을 찾은 후 세미콜론 인 함수 선언이 아니라 변수 선언.

누구든지이 문제를 해결할 방법을 제안 할 수 있습니까?