0
, 나는 다음과 같은 문장이 있습니다ANTLR 인쇄 지수 내 ANTLR 문법에서
이@lexer::apifuncs
{
LEXER->rec->displayRecognitionError = recognition_error;
}
@parser::apifuncs
{
RECOGNIZER->displayRecognitionError = recognition_error;
}
C 함수는 "recognition_error"(ANTLR에 의해 슬로우 인식 오류를 처리하기 위해)로 정의된다 다음
void recognition_error(pANTLR3_BASE_RECOGNIZER recognizer, pANTLR3_UINT8 *token_list)
{
pANTLR3_EXCEPTION ex;
pANTLR3_LEXER lexer;
pANTLR3_PARSER parser;
pANTLR3_TREE_PARSER tparser;
pANTLR3_INPUT_STREAM ins;
pANTLR3_INT_STREAM is;
pANTLR3_COMMON_TOKEN_STREAM cts;
pANTLR3_TREE_NODE_STREAM tns;
if (recognizer->type == ANTLR3_TYPE_LEXER)
{
lexer = (pANTLR3_LEXER) (recognizer->super);
ins = lexer->input;
is = ins->istream;
}
else if (recognizer->type == ANTLR3_TYPE_PARSER)
{
parser = (pANTLR3_PARSER) (recognizer->super);
cts = (pANTLR3_COMMON_TOKEN_STREAM)(parser->tstream->super);
is = parser->tstream->istream;
}
else if (recognizer->type == ANTLR3_TYPE_TREE_PARSER)
{
tparser = (pANTLR3_TREE_PARSER) (recognizer->super);
tns = tparser->ctnstream->tnstream;
is = tns->istream;
}
else
{
printf("UNKNOWN ERROR!\n");
return;
}
printf("INFO <%d> * <%d> * <%d> * <%d>\n", recognizer->state->exception->line, recognizer->state->exception->charPositionInLine, recognizer->state->exception->index, ((pANTLR3_COMMON_TOKEN) recognizer->state->exception->token)->getCharPositionInLine);
}
내가 잘못된 문자를 가지고 텍스트를 구문 분석이 문법을 사용할 때마다, 기능 "recognition_error"는 문자의 인덱스를 인쇄하지 않습니다 오류가 발견 된 곳 (-1 또는 0처럼 가비지를 인쇄합니다).
올바른 색인을 인쇄하려면이 문법 및/또는 C 함수를 어떻게 고정시킬 수 있습니까?
감사합니다. 마이크! MySQL Workbench 프로젝트의 오류 처리 코드는 프로젝트를 구현하는 방법을 명확히하는 데 도움이되었습니다. – user5793565