为什么在方法结尾处写return jjtThis
?
它会产生什么影响?
如果我不写这条线怎么办?
我应该何时添加此行,何时不应添加此行?
其他地方的法官是return
吗?
ASTDirectSQLStatement DirectSQLStatement() :
{}
{
DirectlyExecutableStatement() <SEMICOLON>
{
return jjtThis;
}
}
ASTDirectlyExecutableStatement DirectlyExecutableStatement() :
{}
{ (
LOOKAHEAD(<SELECT> | <DELETE> <FROM> | <INSERT> | <UPDATE> | <DECLARE>)
DirectSQLDataStatement()
| LOOKAHEAD(SQLSchemaStatement())
SQLSchemaStatement()
)
{
return jjtThis;
}
}
谢谢:)
答案 0 :(得分:0)
很简单, jjtThis 是 SimpleNode 类的特殊标识符,它指的是它内部编写的函数/生产。当我们生成一个解析树或AST时,我们使用/ return jjtThis。在你的例子中; DirectSQLStatement 生产是树中的一个节点,此生产调用另一个生产 DirectlyExecutableStatement ,它将是树中 DirectSQLStatement的子节点, DirectlyExecutableStatement 然后调用其他一些产品,这将是它的孩子等等。
SimpleNode是创建树的类。通常 jjtThis 仅从语法的第一个生产/函数返回,而在main()中你有一个 SimpleNode的对象说“root”捕获它。然后通过root.Dump(“”)打印树。希望它有所帮助!