代数データ型のトップダウン ビジットを実行しようとしています。特定のタイプのノードを見つけたら、その特定のノードのノードにもバインドしたいと思います。
data Script=script(list[Stmt] body | ...
data Stmt =exprstmt(Expr expr)| ...
data Expr =assign(Expr left, Expr right) | var(str name)| scalar(Type aType)|... ;
Script myScript=someScript(srcFile);
top-down visit(myScript)
{
case (Expr e:assign(left,right), left:=var(_), right :=scalar(_) )
{
str varName=left.name;
Type myType=right.aType;
}
}
したがって、case ステートメントで私がやろうとしているのは、特定の種類のノードを検索することです。つまり、2 つのパターン マッチを実行して、型 assign(var( ),scalar( )) を検索します。私の意図は、特定の種類のノードを見つけると同時に、左と右の変数をそれぞれ var( ) と scalar( ) にバインドすることです。サブノードに関する情報を取得するために、ネストされた「case」ステートメントを実行しないことを望んでいました。多分それは可能ですが、私にはわかりません。