Parsecで演算子を自己定義できる文法のパーズ

メモ

programParser :: GenParser Char OpTable (CodeTree, OpTable)
...

case (runParser programParser initOpTable codename code) of
  Right (codeTree, opTable) ->
 ...

演算子は関数へのマッピングにするとして、取れる選択肢は、

  • 固定演算子/モジュール読み込み関数
  • 演算子宣言(コンパイル単位ごと)/モジュール読み込み関数
  • モジュール宣言
  • 段階的パーズ(入れ子型構造で処理し、実行にはいる直前に中身を処理する)

スクリプト言語形式では、宣言スタイルは順番の解決などで相性がよくない。

そういやPythonって循環importはどうやって処理してるんだっけ。