2

つまり、構文はどのように定義されているのでしょうか。つまり、これらのような独自の構造を作成するにはどうすればよいでしょうか?

多くの言語では、このようなことがコンパイラ/仕様に組み込まれることを認識しているため、コンパイラによって処理されます(少なくとも、私がそれをどのように機能させるかを理解しています)。

しかし、Python を使用すると、これまでに遭遇したすべてのものにプログラマーがアクセスできるようになりました。

orの独自のバージョンを作成するにはどうすればよいですforwhile? それは可能ですか?

私はこれに対する実際のアプリケーションを持っていないので、理由に対する答えは?! 質問は単に「理由がないから」です。または「好奇心」。

4

4 に答える 4

3

いいえ、できません。Python 内からではありません。言語に新しい構文を追加することはできません。(独自のカスタム バージョンの Python を作成するには、Python 自体のソース コードを変更する必要があります。)

iterator プロトコルを使用すると、独自の方法で使用できるオブジェクトを定義できることに注意してくださいfor。これは、独自の反復構文を作成する場合に考えられる多くのユース ケースをカバーします。

于 2013-07-27T19:16:47.117 に答える
1

独自の構文を作成するには、いくつかのオプションがあります。

  1. mapまたはのような高階関数を書きreduceます。

  2. C レベルで python を変更します。ご想像のとおり、これは他の多くの言語をいじるのに比べて比較的簡単です。例については、この記事を参照してください: http://eli.thegreenplace.net/2010/06/30/python-internals-adding-a-new-statement-to-python/

  3. デバッグ機能またはエンコーディング機能を使用して偽装します。次のコードを参照してください: http://entrian.com/goto/download.htmlおよびhttp://timhatch.com/projects/pybraces/

  4. プリプロセッサを使用します。これを簡単にしようとする 1 つのプロジェクトがあります: http://www.fiber-space.de/langscape/doc/index.html

  5. 組み込みの Python 機能を使用して、同様の効果 (デコレータ、メタクラスなど) を実現します。

明らかに、これはあなたが探しているものではありませんが、python は、smalltalk や Lisp とは異なり、(必ずしも) それ自体でプログラムされておらず、実行時に独自の基本的な実行および解析メカニズムを公開することが保証されています。

于 2013-07-27T19:51:38.257 に答える
1

同等の構造を作成することはできません。for、などはステートメントwhileであり、独自の構文で言語に組み込まれています。Scalaなど、この種のことを (ある程度) 許可する言語がありますif

于 2013-07-27T19:18:04.490 に答える
1

whileprintなどforはキーワードです。つまり、コードの読み取り中に Python パーサーによって解析され、冗長な文字が取り除かれ、トークンが生成されます。その後、レクサーはこれらのトークンを入力として受け取り、インタープリターによって実行されるプログラムツリーを構築します。そうは言っても、これらの構造は、基礎となる字句機械の構文糖衣としてのみ使用され、コード内からは見えません。

于 2013-07-27T19:24:03.370 に答える