問題タブ [ply]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
457 参照

python - Python で論理式を処理するにはどうすればよいですか?

ieの形式で論理式を取得したとしましょう。AvBv~C->D. ブール要素と(v,~,->)(論理和、否定、含意) などの演算子で構成されます。これらの式と、それらを構成する各要素を保存する必要があります。また、各要素には説明が必要なので、それらを表すクラスを作成する必要があると思います(フィールドrepresentationdescriptionieを使用しますが、これがpythonicの方法であるかどうかはわかりません。名前と説明を列として持つ2D配列かもしれませんelement1.representation="A")element1.description="This is element A"名前はすべて一意であるため、より良いアイデアです。

  1. このような式を格納するには、どのデータ構造を使用すればよいですか? 異なる型の要素と演算子を格納し、それらを論理式として復元し、それらに対して操作を実行できるようにする必要があるという事実に注意してください。
  2. 論理演算を処理するために、各要素と演算子を認識するメソッドを作成する必要がありますか、それともより良いアプローチがありますか? おそらく、Lex-Yacc のようなパーサーや、それらを扱う他のライブラリを使用するのでしょうか?

あまり明確でない場合はご容赦ください。ただし、同じデータ構造に異なるタイプの要素を格納できない Java から来ています。

0 投票する
2 に答える
2522 参照

python - 一重引用符、二重引用符、または三重引用符を含む Lex 文字列

私の目的は、Python が文字列を処理するように解析することです。

質問:以下をサポートする lex の書き方:

  1. "string..."
  2. 'string...'
  3. """multi line string \n \n end"""
  4. '''multi line string \n \n end'''

いくつかのコード:


私の現在のアイデアは、4 つの異なる文字列ケースに一致する4 つの一意の状態を作成することですが、より良いアプローチがあるかどうか疑問に思っています。

ご協力いただきありがとうございます!

0 投票する
1 に答える
3257 参照

python-2.7 - PLY を使用して通常の文字列に一致させる

PLYを使用してパーサーを作成しています。質問はこれに似ていますエスケープが二重引用符文字である文字列リテラルに一致する正規表現を書く方法? . ただし、文字列の開閉には二重引用符を使用します。例えば:

「\"A\"が何かわかりません」

通常の文字列レクサーを次のように定義します。

そして、変数用の別のレクサーがあります:

問題は、レクサーが「\"A\" が何かわからない」を NORMSTRING トークンとして認識しないことです。エラーを返します

正しくない理由を教えてください。

0 投票する
1 に答える
238 参照

python - python -OO で PLY を使用しますか?

アプリケーションが開始されるシステムがあります:

アプリケーションの起動方法を変更することはできませんが、アプリケーションを完全に制御できます。PLYを使用してアプリケーションにパーサーを追加するとき、-OO が PLY が依存するドキュメントストリングを削除するという事実に悩まされました。

-OO で起動したアプリケーションで PLY を使用することはできませんか? この問題を解決するために使用できる巧妙な Python トリックはありますか?

Cython を使用してパーサー モジュールをコンパイルすることを考えています。それができるかどうかはわかりませんし、複雑さの層が追加されるので、その道を進む前に、他のアイデアをいただければ幸いです。

0 投票する
0 に答える
146 参照

python - 単純な PLY インタープリターで引数リストから非決定性を解決する

些細なことだと思うことを解決するのに苦労しています。PLY の calc の例を修正して、いくつかの関数呼び出しと、1 つ以上の式 (式は名前、数値、またはリテラル) を受け入れることができる引数リストを含めました。問題は、私の実装が非決定論的であることです。複数行の引数が正しく、そうでない場合もあります。

たとえば、実行中に次のように入力しています。

時々実行すると、次のようになります。

また、プログラムを実行すると、これが生成されます(これは避けたいです):

どちらの場合も、パーサーは正しいルール (p_expression_number) に入りますが、間違ったものを選択することもあります。半分の時間は、(コンマを無視して) 式に縮小され、次の引数であるコンマが理解できないと不平を言うように見えます。それ以外の時は大丈夫です。

これを解決するにはどうすればよいですか? 私はいくつかのことを試しましたが、例を調べましたが、わかりません。

これが私のコードです:

0 投票する
1 に答える
239 参照

python - PLY を使用して Python で記述された言語は遅くなりますか?

独自のプログラミング言語の作成に興味があり、Python を使用したいと考えています。私の質問は、PLY ライブラリを使用して Python で記述された言語は、CPython よりもかなり遅いでしょうか、それともプログラムの実行速度に関してはほぼ同じでしょうか? また、Cで実装した場合、パフォーマンスの点でどれくらい良くなりますか?

ありがとう、フランシス

0 投票する
1 に答える
458 参照

parsing - この文法でバックトラックする必要を避けるために、何かできることはありますか?

私はプログラミング言語のインタープリターを実装しようとしていますが、後戻りする必要があるケースに出くわしましたが、私のパーサージェネレーター (ply、Python で書かれた lex&yacc クローン) はそれを許可しません。関係するルールは次のとおりです:

エラーは、フォームのステートメントで発生します

SomeGuy.SomeOtherGuy は、型を格納する有効な変数です (型はファースト クラス オブジェクトです)。その型には、引数のないコンストラクターがあります。

その式を解析すると、パーサーは var_access_start = SomeGuy var_access_metcall = を構築します。SomeOtherGuy ( ) を実行し、セミコロンを見つけてエラー状態で終了します - パーサーがバックトラックして、式 = new typereference(SomeGuy .SomeOtherGuy) LPAREN empty_list RPAREN を作成してみてください。var ステートメントの構文と完全に一致します

ただし、PLY はバックトラッキングをサポートしておらず、パーサー ジェネレーターで実際に自分で実装するのに十分な経験がないことを考えると、問題を回避するために文法に変更を加えることはできますか?

の代わりに -> を使用することを検討しました。「メソッド呼び出し」演算子としてですが、パーサーをなだめるためだけに言語を変更したくありません。また、「変数参照」の形式としてメソッドがあるため、 myObject.someMethod().aChildOfTheResult[0].doSomeOtherThing(1,2,3).helloWorld() を実行できますが、文法を修正して同じ効果、それも私のために働くだろう

ありがとう!