을 구문 분석 할 때 오류 라인 번호를 내가 ANTLR에 의해 슬로우 인식 오류 잡기 위해 다음과 같은 C 함수가 : 여러 줄의 텍스트를ANTLR : 여러 줄을 텍스트
void recognition(pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_UINT8 *list)
{
pANTLR3_PARSER parser;
pANTLR3_EXCEPTION exception;
parser = (pANTLR3_PARSER) (recognizer->super);
exception = recognizer->state->exception;
printf("%d\n", exception->line); // ALWAYS PRINTS 1 (WHICH IS WRONG)
}
한 경우, 파싱을 (ANTLR로)을 그 첫 번째 줄에 오타가있는 경우 recognition
함수는 "1"을 인쇄합니다 (올바른 경우). 그러나 첫 번째 줄 (즉, = 2) 다음에 오타가 발생하면 recognition
함수는 항상 "1"을 인쇄합니다 (잘못된 것입니다).
질문 : 구문 분석 오류가있는 올바른 줄 번호를 어떻게 인쇄 할 수 있습니까? (제안 : 개행 토큰을 구문 분석 할 때마다 특정 ANTLR 카운터를 증가 시키려면 문법을 업데이트해야합니까?) 그것은 우리의 관점에서
A
A
:
start : rule1 | rule2;
rule1 : 'A' 'B';
rule2 : 'A' 'C';
입력 : -
무슨 일이 일어나는지 파서를 디버그하십시오. 라인 정보는 일반적으로 구문 분석 오류의 원인이 된 토큰에서 가져옵니다. 예상했던 토큰이 맞습니까? 정확한 회선 정보를 가지고 있습니까? –