2

数年前、私はプログラミング言語に関するいくつかのアイデアに取り組み始めました。それらにとても興奮していたので、それらがどのように機能するかを知りたかったので、そのための非常に単純なコンパイラーを作成することにしました。私はPHPの方が快適で経験豊富なので、PHPでコンパイラーを作成できるかどうかを調べたところ、すぐに可能であることがわかりました。だから私はそれを作り始めました、そして幸いなことにすべてが大丈夫でした、そして今それはうまく働いています。

当時、私は自分のアイデアに取り組み始める場所が欲しかったのですが、PHPは開発が速く(コンパイルする必要がない)、MySQLも手元にあり、デバッグも非常に簡単でした。

今、私はこの単純なコンパイラを拡張したいと思います、そしてそれは私があなたのアドバイスを必要とするところです。私の主な質問は、「PHPはコンパイラプロジェクトに適したツールですか?」です。公開するつもりはないと仮定して、配布などの問題ではなく、タスクを処理するPHPの機能について考えてみてください。

いくつかの利点があると思います。開発は迅速です。コードを編集してブラウザでF5キーを押すだけで、その直後にバイナリ出力が得られました。また、そこにテキストボックスを作成して、簡単なコードを記述し、送信を押してから、バイナリ出力を再度取得しました。また、MySQLで解析されたデータを保持し、作業するのも高速でした。しかし、今では、たとえばスクリプトのタイムアウトについてもっと心配しています。10,000行のソースコードをコンパイルすると、タイムアウトになると思います。タイムアウトを増やすことができることはわかっていますが、それでも心配です。また、スクリプト言語としてのPHPは、(私が聞いたように)コンパイルされたアプリケーションよりも10倍遅いことも知っています。

それで、私はCに切り替える必要があると思いますか?(私もそれで大丈夫です)...または、PHPバックエンドを続行できるが、より深刻なことを処理し、重大なミスに直面することなく、何かアイデアがありますか?

アップデート:

はい!プロジェクトは個人的で楽しいものです。あなたもそれを考慮するかもしれません!

PHPベースのコンパイラーのアプリケーションに関しては、そうです、それは実際のコンパイラーではありませんが、アイデアを他の人と共有したい場合は、コードを書くためのWebフォームを提供してボタンを押すとよいでしょう。バイナリコードをダウンロードします。それは私の目標ではありませんが、私はそれについて疑問に思っています。

Lex / Yaccに関しては、最終的なバイナリコードを最適化することを目的としていたため、Lex/Yaccを介してバイナリコードを生成するだけでは不十分でした。

4

4 に答える 4

7

PHPは、コンパイラーを作成するための理想的な環境ではありません。それは実行可能ですか?もちろん。あなたはそれをすべきですか?私は、PHPのような高級言語でコンパイラーを書くことに強く反対しています。私はまた、不必要に車輪の再発明をすることに反対しています。

楽しみのためなら、私はそれをやりなさいと言いますが、現時点では、PHP駆動型コンパイラーの実用的な使用法は見当たりません。

于 2012-10-03T06:12:52.940 に答える
2

任意の言語でコンパイラーを作成することが可能です(一部のチューリング完全でない言語でも使用できます)。しかし、生活を楽にするためには、PHPに欠けている特定の言語機能が必要になります。また、PHPはかなり低レベルの言語であるため、そのような機能を言語に追加することはまったく不可能です。

コンパイラを実装するための適切な言語には、次のものが含まれている必要があります。

  • 代数的データ型のいくつかの形式、それは完全に動的な言語(Lispのような)にも関連します
  • パターンマッチングは、より強力で表現力豊かです-より良いです。パターンマッチングなしでAST変換を作成するのは面倒です。

これは最低限です。グラフを適切にネイティブにサポートできることは利点です。構文解析のサポートが組み込まれていると非常に便利です(ただし、構文解析は一般的にそれほど重要ではありません)。実行時にPrologまたはDatalogにアクセスできることは非常に便利です(ただし、PHPで独自のPrologを実装するのは簡単です)。

于 2012-10-03T07:40:51.253 に答える
1

Webjawnsは次のように述べています。しかし、現時点では、PHP駆動型コンパイラの実用的な使用法は見当たりません。それで????Smarty-コンパイラーです!!!

あなたのコンパイラーが単に楽しみのため、または特定のphp関連の使用のためであるなら-それは環境としてphpをとることは良い考えです。

ただし、コンパイラにパフォーマンス要件やメモリ制限がある場合は、PHPを使用することは非常に悪い考えです。

于 2012-10-03T07:27:22.797 に答える
0

次のようなコンピュータプログラマーのギャグがあります。

ルーキー:なぜCはJavaよりも「より速く実行する」/「より少ないメモリを使用する」/「ここに他の最適化比較を挿入する」と見なされるのですか?
メンター: JavaコンパイラーはCで書かれているのに対し、CコンパイラーはCで書かれているためです(最適化のためのアセンブリのトレースが含まれています)。

ほとんどすべてのコンパイラはCで記述されています。同じことがほとんどすべてCで記述されているオペレーティングシステムにも当てはまります。高級言語が使用するほとんどすべての主要なプレパックライブラリはCで記述されています。ほとんどすべての高負荷サーバー(Apache &MySQLを含む)はCで書かれています。基本的に、ほとんどすべてのミッションクリティカルなソフトウェアはCで書かれています。

それを念頭に置いて、idは言います:

楽しみのために、PHPでトークナイザー->パーサー->トランスコーダーチェーンを作成します。データベースストレージを備えたチェーンでもかまいません。しかし、私はテキスト(別の言語のソースコード)を出力します。

PHPからバイナリファイルを出力したくないので、PHPでコンパイラを記述しません。出力できないためではなく、バイナリ演算に文字列を使用するのが好きではないためです。

私がCで書くコンパイラ。

于 2012-10-03T06:31:21.077 に答える