javacc,为什么'返回jjtThis'

时间:2013-06-08 09:51:44

标签: javacc

为什么在方法结尾处写return jjtThis? 它会产生什么影响? 如果我不写这条线怎么办? 我应该何时添加此行,何时不应添加此行? 其他地方的法官是return吗?

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

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

谢谢:)

1 个答案:

答案 0 :(得分:0)

很简单, jjtThis SimpleNode 类的特殊标识符,它指的是它内部编写的函数/生产。当我们生成一个解析树或AST时,我们使用/ return jjtThis。在你的例子中; DirectSQLStatement 生产是树中的一个节点,此生产调用另一个生产 DirectlyExecutableStatement ,它将是树中 DirectSQLStatement的子节点, DirectlyExecutableStatement 然后调用其他一些产品,这将是它的孩子等等。

SimpleNode是创建树的类。通常 jjtThis 仅从语法的第一个生产/函数返回,而在main()中你有一个 SimpleNode的对象说“root”捕获它。然后通过root.Dump(“”)打印树。希望它有所帮助!