バイナリプレフィックス、バイナリインフィックス、およびバイナリポストフィックス演算子 (すべてのシンボルが異なると仮定します) を含む式を (あいまいさなしで) 解析することは可能ですか? 例えば:
a = 2 3 post+
b = pre+ 2 3*4
その後、後置演算子よりも優先順位が低く、 になるa
ため、5 に等しくなります。中置表記式を演算子の優先順位解析またはシャントヤードで解析できることは知っていますが、この問題は私にとってははるかに複雑に思えます。=
post+
b
14
編集:
括弧は許可されており、演算子の前後のバリエーションは中置のものと同じ優先順位を持ちます。
手書きのアルゴリズムを転がしたいと思います。
編集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番目は、この状況で必要なものです)。演算子が動的に読み込まれるため、既存のパーサー ジェネレーターや固定文法をオペランドに実際に使用することはできません。