web-dev-qa-db-ja.com

Pythonのミニ言語

私は、Pythonで簡単なミニ言語パーサーを作成した後、問題のあるドメインに近いプログラミングを行っています。

とにかく、私はここにいる人々がそれをどうやってやるのだろうと思っていました-Pythonでこの種のことをするための好ましい方法は何ですか?

現時点では、このフィールド全体がPythonでいかに簡単であるかを調査しているだけなので、具体的な詳細については説明しません。

ご協力ありがとうございます。

45
Reality

Pyparsing は「小さな言語」を書くのに便利です。私は PyCon'06でのプレゼンテーション を与えて、単純なアドベンチャーゲームエンジンを記述しました。この場合、解析および解釈される言語はゲームコマンドセット(「インベントリ」、「剣を取る」、「ドロップブック」)でした。など)。 (ソースコード ここ 。)

pyparsing wiki で他のpyparsing記事へのリンクを見つけることもできます。

41
PaulMcG

[〜#〜] ply [〜#〜] (Python Lex-Yacc)を使用した経験は限られていますが、前向きです。 LexとYacc の機能を1つのPython=クラスにまとめたものです。チェックしてみてください。

Stackoverflow'erの仲間 Ned Batchelder は、彼のウェブサイトで利用可能なツールの Nice overview を公開しています。 Pythonウェブサイト 自体にも概要があります。

23
Stephan202

funcparserlib をお勧めします。特に小さな言語とDSLを解析するために作成されたもので、pyparsingよりも高速で小さくなっています(ホームページの統計を参照)。ミニマリストと関数型プログラマはfuncparserlibを好きになるべきです。

編集:ちなみに、私はこのライブラリの作成者なので、私の意見は偏っているかもしれません。

21

Pythonは非常に素晴らしくシンプルで拡張可能な言語であるため、包括的なpythonモジュールを作成し、それに対してコーディングすることをお勧めします。

上記を入力している間に PLY がすでに言及されていることがわかります。

5
gnud

生産性を高めるために、私は常に CocoPyTutorial )のようなパーサージェネレーターを使用して、文法を(正しい)パーサーに変換します(実装したくない場合を除く)学習のためにパーサーを手動で)。

残りは実際のインタプリタ/コンパイラを作成しています(スタックベースのバイトコードまたはメモリを作成するAST解釈してから評価する)。

3
Dario

今これを私に尋ねたら、私はpythonのtextxライブラリを試してみます。あなたは非常に簡単にPythonでDSLを作成することができます!利点は、ASTが作成され、字句解析と解析が組み合わされることです。

http://igordejanovic.net/textX/

3
Windel