自作言語の文字列を一種のツリーに解析しようとしています。
# a * b1 b2 -> c * d1 d2 -> e # f1 f2 * g
結果は次のようになります。
# a
* b1 b2
-> c
* d1 d2
-> e
# f1 f2
* g
#、*、-> は記号です。a、b1 などはテキストです。
その瞬間から、式を評価するためのrpnメソッドしか知らないので、現在の解決策は次のとおりです。各シンボルの後に 1 つのテキスト トークンのみを許可する場合、最初に式を RPN 表記 (b = b1 b2; d = d1 d2; f = f1 f2) に簡単に変換し、ここから解析できます。
abc -> * de -> * # fg * #
ただし、テキスト トークンとその他のものをマージすると、問題が発生するようです。私のアイデアは、マーカー トークン (M) を作成することだったので、RPN は次のようになります。
a M b2 b1 M c -> * M d2 d1 M e -> * # f2 f1 M g * #
これも解析可能で、問題を解決しているようです。
それは言った:
- そのようなことを経験したことがあり、それが将来の実行可能な解決策である、または実行できないと言える人はいますか?
- 演算子のアリティが定義されていない式を解析するためのより良い方法はありますか?
- 良いリソースを教えてもらえますか?
ノート。はい、私はこの例が Lisp のプレフィックス表記法に非常によく似ていることを知っています。また、いくつかのブラケットを追加する方法があるかもしれませんが、ここでの経験はありません。ただし、ソース テキストには人為的なブラケットを含めてはいけません。また、# a * b -> [if value1 = value2] c -> d のような潜在的な中置 mixin についてどうすればよいかわかりません。
助けてくれてありがとう。
編集:私が探しているのは、可変数の引数を持つ後置表記のソースのようです。