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プロダクションはツリー内のノードです。このプロダクションは、ツリー内の DirectSQLStatement の子ノードとなる別のプロダクション DirectlyExecutableStatement を呼び出します。DirectlyExecutableStatementは、その子となる他のプロダクションを呼び出します。

SimpleNode は、ツリーを作成するクラスです。通常、jjtThisは文法の最初の生成/関数からのみ返され、main()ではそれをキャッチする「ルート」と言うSimpleNode のオブジェクトがあります。次に root.Dump(" ") によってツリーが出力されます。それが役に立てば幸い!

于 2016-12-06T10:20:08.857 に答える