演算子空間の実装方法

次に実装方法について考えます。
具体的なJSONを使って記述した演算子表を以下に示します。

{
  infixes:{100:"+",200:"*"},
  operatorSpace:{
    asm:{
      extends:"root",
      infixes:{100:"-",200:"/"}
    }
  }
}

infixes は中置演算子の表です。oparatorSpace が演算子空間でasmという演算子空間を定義しています。

extendsによって、asm演算子空間はroot演算子空間を継承します。

パースする際には、プログラムが開始した場合は+と*があるとしてパースします。asmがあったら次にある式はasm演算子空間にあるとして演算子表をasmの物を使ってパースします。

記号表の変更は、前あった記号表を置き換え、終了したら元に戻します。消すわけではないことに注意しましょう。

無名のローカルなユーザー定義演算子定義が仮に出来るとすれば、演算子表は保存しておいて置きかえるとよいでしょう。

無名な演算子空間は、例えば obscure{ ここ } というようにすれば可能でしょう。