私は、Pythonで簡単なミニ言語パーサーを作成した後、問題のあるドメインに近いプログラミングを行っています。
とにかく、私はここにいる人々がそれをどうやってやるのだろうと思っていました-Pythonでこの種のことをするための好ましい方法は何ですか?
現時点では、このフィールド全体がPythonでいかに簡単であるかを調査しているだけなので、具体的な詳細については説明しません。
ご協力ありがとうございます。
Pyparsing は「小さな言語」を書くのに便利です。私は PyCon'06でのプレゼンテーション を与えて、単純なアドベンチャーゲームエンジンを記述しました。この場合、解析および解釈される言語はゲームコマンドセット(「インベントリ」、「剣を取る」、「ドロップブック」)でした。など)。 (ソースコード ここ 。)
pyparsing wiki で他のpyparsing記事へのリンクを見つけることもできます。
[〜#〜] ply [〜#〜] (Python Lex-Yacc)を使用した経験は限られていますが、前向きです。 LexとYacc の機能を1つのPython=クラスにまとめたものです。チェックしてみてください。
Stackoverflow'erの仲間 Ned Batchelder は、彼のウェブサイトで利用可能なツールの Nice overview を公開しています。 Pythonウェブサイト 自体にも概要があります。
funcparserlib
をお勧めします。特に小さな言語とDSLを解析するために作成されたもので、pyparsing
よりも高速で小さくなっています(ホームページの統計を参照)。ミニマリストと関数型プログラマはfuncparserlib
を好きになるべきです。
編集:ちなみに、私はこのライブラリの作成者なので、私の意見は偏っているかもしれません。
Pythonは非常に素晴らしくシンプルで拡張可能な言語であるため、包括的なpythonモジュールを作成し、それに対してコーディングすることをお勧めします。
上記を入力している間に PLY
がすでに言及されていることがわかります。
今これを私に尋ねたら、私はpythonのtextxライブラリを試してみます。あなたは非常に簡単にPythonでDSLを作成することができます!利点は、ASTが作成され、字句解析と解析が組み合わされることです。