0

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

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

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

谢谢 :)

4

1 回答 1

0

很简单,jjtThisSimpleNode类的一个特殊标识符,它指的是里面写的 Function/Production。我们在生成解析树或 AST 时使用/返回 jjtThis。在你的例子中;DirectSQLStatement生产是树中的一个节点,该生产调用另一个生产DirectlyExecutableStatement,它将是DirectSQLStatement在树中的子节点,然后DirectlyExecutableStatement调用一些其他生产,这将是其子节点,依此类推。

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

于 2016-12-06T10:20:08.857 回答