5

バイナリプレフィックス、バイナリインフィックス、およびバイナリポストフィックス演算子 (すべてのシンボルが異なると仮定します) を含む式を (あいまいさなしで) 解析することは可能ですか? 例えば:

a = 2 3 post+
b = pre+ 2 3*4

その後、後置演算子よりも優先順位が低く、 になるaため、5 に等しくなります。中置表記式を演算子の優先順位解析またはシャントヤードで解析できることは知っていますが、この問題は私にとってははるかに複雑に思えます。=post+b14

編集:

括弧は許可されており、演算子の前後のバリエーションは中置のものと同じ優先順位を持ちます。

手書きのアルゴリズムを転がしたいと思います。

編集2:

優先的に、私は消費する量を意味します。たとえば、次のようになります。

a = 2 3 post+

次の AST が発生する可能性があります。

'=' has higher precedence than 'post+':
    post+
    /  \
   =    3
  / \
 a  2

'post+' has higher precedence than '=':
      =
     / \
   a   post+
       /  \
      2    3

(2番目は、この状況で必要なものです)。演算子が動的に読み込まれるため、既存のパーサー ジェネレーターや固定文法をオペランドに実際に使用することはできません。

4

0 に答える 0