2013-06-08 4 views
0

왜 끝 부분에 return jjtThis을 쓰시겠습니까? 어떤 효과가 있습니까? 이 줄을 쓰지 않으면 어떻게해야합니까? 이 줄을 언제 추가해야합니까?이 줄을 추가하지 않아야합니까? 다른 곳의 판사를위한 return입니까? javacc, 왜 'jjtThis'를 반환합니까?

ASTDirectSQLStatement DirectSQLStatement() : 
{} 
{ 
DirectlyExecutableStatement() <SEMICOLON> 
{ 
    return jjtThis; 
} 
} 

ASTDirectlyExecutableStatement DirectlyExecutableStatement() : 
{} 
{ (
LOOKAHEAD(<SELECT> | <DELETE> <FROM> | <INSERT> | <UPDATE> | <DECLARE>) 
DirectSQLDataStatement() 
| LOOKAHEAD(SQLSchemaStatement()) 
SQLSchemaStatement() 
) 
{ 
    return jjtThis; 
} 
} 

감사합니다 :)

+0

실제로 jjtThis를 반환하는 것이 다소 이상하다고 생각합니다. 이것은 .jjt 파일, .jjt 파일에서 생성 된 .jj 파일 또는 .jjt 파일에서 생성되지 않은 .jj 파일에 있습니까? –

+0

내 실수로 .jjt 파일에 있습니다. –

+0

Ok. 내가 말했듯이, jjtThis를 반환하는 것은 이상합니다. jjt 파일을 작성한 사람에게 물어볼 수 있습니까? –

답변

0

아주 간단하게, jjtThis 그것이 내부에 기록 된 기능/생산을 의미 SimpleNode 클래스의 특별한 식별자입니다. 파스 트리 나 AST를 생성 할 때/return jjtThis를 사용합니다. 당신의보기에서; DirectSQLStatement 생산이 트리의 노드이며,이 제품은 트리에서 DirectSQLStatement의 자식 노드가 될 또 다른 생산 DirectlyExecutableStatement 호출 DirectlyExecutableStatement는 그래서 등등 그 아이가 될 것입니다 다른 제품 (들)를 호출 앞으로.

SimpleNode는 나무를 만드는 클래스입니다. 보통 jjtThis은 문법의 첫 번째 프로덕션/함수에서만 리턴되며 main()에서 SimpleNode의 오브젝트는이를 잡는 "root"라고합니다. 그런 다음 루트에 의해 덤프 ("") 트리가 인쇄됩니다. 희망이 도움이됩니다!