のような構文定義を持つ:パターンマッチング構文定義
syntax ClassDeclaration = classDecl: "class" Identifier ClassBody ;
...
syntax ClassBody = classBody : "{" ClassBodyDeclaration* "}" ;
syntax ClassBodyDeclaration = ClassMemberDeclaration
| InstanceInitializer
| StaticInitializer
| ConstructorDeclaration
;
...
の訪問者を使用するには、私が使用して、クラスのボディに一致するパターンにできる午前:
visit(unit) {
case classDecl(name, ClassBody body): { // a block "A" here }
...
}
質問:このような状況では、 "A"ブロック内の "body"変数からクラス本体宣言のリストをどのようにパターン化できますか?私は理解しようとしましたが、私は "体"は列挙型ではないと思いました。
syntax ClassBody = classBody : "{" ClassBodyDeclaration* decls "}";
あなたは、インスタンスのために、リストにそれらを抽出するためにdeclList = [ d | d <- body.decls ]
ようなコードを使用して、各宣言にアクセスするために理解を使用することができます。
面白いです。最後のアプローチだけが私のために働く。最初のものは次のような例外につながります:NoSuchField( "decls")、さらにyntax ClassBody = classBody: "{" ClassBodyDeclaration * decls "}"; " –