私はすでに遭遇したトークンのセットを含む環境を持っています。新しいトークンを見るとき、そのトークンを現在の環境に追加したいと思います。基本的には、構文解析を実行する環境での集合和集合演算を表現したいと思います。
Γ'={Γ、x}のようなもの
変数'x'を削除したい場合(環境からxを削除します)
x∈Γの場合、Γ'=Γ--x。
これらの2つの形式を書くための適切な方法は何ですか。ありがとう。
私はすでに遭遇したトークンのセットを含む環境を持っています。新しいトークンを見るとき、そのトークンを現在の環境に追加したいと思います。基本的には、構文解析を実行する環境での集合和集合演算を表現したいと思います。
Γ'={Γ、x}のようなもの
変数'x'を削除したい場合(環境からxを削除します)
x∈Γの場合、Γ'=Γ--x。
これらの2つの形式を書くための適切な方法は何ですか。ありがとう。
基本的に、挿入、削除、検索をサポートするデータ構造として環境を実装し、そのデータ構造をパーサーに渡します。パーサーで、現在のトークンを確認し、環境に適切な更新を行い、次のトークンでパーサーを再帰的に呼び出して、更新された環境に渡すと想像します。
どの特定のデータ構造を使用するかはあなた次第です。二分探索木またはそのバリアントで問題ありません。または、パフォーマンスを気にしない場合は、Haskell の組み込みリスト型を使用できます。
編集: このプロセスを正式に書き留めるには、型規則とその記述方法から借りることができます。ここに参照があります。たとえば、プログラムが正常に解析されたことを示すことができますΓ ⊢ program:OK
(ここで実際の型を扱いたいかどうかはわかりません)。次に、トークンを環境に追加するには、次のように記述できます。
Γ,id ⊢ program:OK
-------------------------
Γ ⊢ add id, program:OK
トークンを削除するには、次のように記述できます
Γ ⊢ program:OK
------------------------------
Γ,id ⊢ remove id, program:OK