のような式のレクサーとパーサーを3-5*6*8
作成しました。これは、次のトークンにコンパイルされます。
- 数(3)
- オペレーター(-)
- 数(5)
- オペレーター(*)
- 数(6)
- オペレーター(*)
- 数(8)
次に、パーサーは、再帰的な降下と逆の優先順位の上昇の組み合わせであると私が感じるアプローチを取ります。おおよそ次のように機能します。
parse(3-5*6*8)
add(parse(3), -parse(5*6*8))
add(3, -product(parse(5), parse(6), parse(8))
add(3, -product(5, 6, 8))
このように、トークン シーケンスは優先順位が最も低いものから最も高いものへと再帰的に解析されます。また、括弧処理システムを介して関数を処理しますが、それはこの質問の範囲を超えています。
このメソッドは、既知の演算子優先パーサーのアプローチのいずれかに分類できますか、それともこの種の新しい(奇妙な)ものですか?
私のメソッドが簡単に分類されるのを妨げていると想像できることの 1 つは、sum
andproduct
のような演算子の複数オペランド システムですが、これは私の特定のアプリケーションで実装を容易にするために必要です。