私はハスケルのC言語のパーサーを書く初めです。私はASTのデータ型をダウンしています。私は物事のパーサー側を掘り下げる前に、AST自体に簡単なクエリを書くことでそれを試しています。2レベルツリー型のUniplateの使用
私のASTはステートメント(if
/else
のような値なし)と式(リテラルまたはバイナリ操作のような値を持つ)の2つのタイプを中心にしています。だから、それは(もちろん大幅に単純化され、)次のようになります。
data Statement
= Return Expession
| If Expression Expression
data Expression
= Literal Int
| Variable String
| Binary Expression Op Expression
は、私が式で使用されるすべての変数の名前を取得したいとします。
varsInExpression exp = concat [s | Variable s <- universe exp]
しかし、文の変数のリストを探したいのですが? Statement
の各コンストラクターには、を適用するネストされたExpression
があります。だから、現時点では、私はすべてのStatement
コンストラクタに対してパターンマッチする必要があるように見えます。これは、ユニプレートが避けるべきものです。私はドキュメントを十分にgrokkingしていないのですか?これはuniplateの制限ですか(それとも間違っていますか?)
ああ!それは素晴らしいです。私はバイプレートに何か関係があるかもしれないと思ったが、 'universeBi'のために生成されたHaddockのドキュメントもなく、Googleが私を助けたこともなかった。感謝のヒープ:)。 –