C 대상을 사용하는 antlr 생성 Java 파서가 있는데 아주 잘 작동합니다. 문제는 오류 코드를 구문 분석하여 의미있는 AST를 생성하기를 원합니다. 세미콜론이 누락 된 하나의 가져 오기가있는 최소 Java 클래스에 피드하면 "가져 오기"토큰과 가져온 클래스의 토큰이 있어야하는 두 개의 "트리 오류 노드"객체가 생성됩니다.오류 노드가 아닌 고정 노드가있는 AST
하지만 다음 코드를 올바르게 구문 분석하고이 코드에 대한 올바른 노드를 생성하므로 세미콜론을 추가하거나 다시 동기화하여 오류를 복구해야합니다. antlr이 AST에서 내부적으로 생성하는 고정 입력을 반영하는 방법이 있습니까? 또는 적어도 "트리 노드 오류"를 발생시키는 토큰/텍스트를 어떻게 얻을 수 있습니까?
static pANTLR3_BASE_TREE
errorNode (pANTLR3_BASE_TREE_ADAPTOR adaptor, pANTLR3_TOKEN_STREAM ctnstream, pANTLR3_COMMON_TOKEN startToken, pANTLR3_COMMON_TOKEN stopToken, pANTLR3_EXCEPTION e)
{
// Use the supplied common tree node stream to get another tree from the factory
// TODO: Look at creating the erronode as in Java, but this is complicated by the
// need to track and free the memory allocated to it, so for now, we just
// want something in the tree that isn't a NULL pointer.
//
return adaptor->createTypeText(adaptor, ANTLR3_TOKEN_INVALID, (pANTLR3_UINT8)"Tree Error Node");
}
여기에 운이 I를 오전에만 오류가 자바 대상 노드의 C :에
라인 (200) 다음 조각 주위
antlr3commontreeadaptor.c는 C의 목표는 지금까지 더미 오류 노드를 만들고 있음을 나타냅니다 대상 생성하면 오류 노드의 텍스트를 검색 할 수 있습니까?
C를 사용하거나 이해하는 데 문제가되지 않으므로 C 태그를 제거해야한다고 생각합니다. 아마도 파서 또는 구문 분석 태그를 추가해야합니다. – nategoose