ホームページ  >  記事  >  バックエンド開発  >  PHP インタープリターを C 言語で作成したいと考えています (できるだけ簡単です)。どこから始めて、どのような手順を踏めばよいでしょうか?

PHP インタープリターを C 言語で作成したいと考えています (できるだけ簡単です)。どこから始めて、どのような手順を踏めばよいでしょうか?

WBOY
WBOYオリジナル
2016-06-17 08:31:011178ブラウズ

<span class="cp"><?php</span>
<span class="k">echo</span> <span class="s2">"hello world .."</span><span class="p">;</span>
<span class="cp">?></span><span class="x"></span>

などの php プログラムを説明および実行できます。返信内容:

1: 字句解析、構文解析、構文ツリーの取得。

2: コードに問題があるかどうかを確認するために使用されるセマンティック アナライザー。たとえば、1+null は正当なプログラムではありません。

3: PHP にはテーブルがあり、PHP には参照があります。循環参照を解決するには、ガベージ コレクターを開発する必要があります。

4: 動的型付け言語の命令セットを設計し、スタックベースの VM を設計します (ソフトウェアはこの命令レベルの CPU をシミュレートします) これは、実行中のプロセスを迅速にシミュレートする最も簡単な方法です。


すると、結果が得られます。

プログラムで PHP スクリプト言語を使用したいですか、それとも本当にインタープリタになりたいですか?
前者の場合は、既存のインタープリタを再利用します。
それ以外の場合は、@vczh の回答にアクセスしてください。 字句解析によりトークンが取得されます - > 文法解析により AST が取得されます - > AST が IR 中間命令セットに変換され、VM 上で IR 中間命令が実行されます。
ほとんどの解釈されたスクリプト言語は次の手順に従います。 実際、これを実行するだけで、AST を生成し、その AST を再帰的に走査することができます。これは私が昔 alex1 バージョンでやったことです (笑)。 ただし、これを行うとパフォーマンスが非常に低下し、GC が実行しにくくなります。 @vczhが言ったように、より良い方法は、IRを実行するスタックベースのVMを構築することです。 スタックベースの VM は、レジスタベースの VM よりも実装が簡単です。 最も簡単な方法は、規則的なルールを使用して語彙単位を厳密に一致させ、抽象構文ツリーを構築し、ノードを走査して C 言語の文法に変換することです。 Zend Engine のソース コード~ を参照してください。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。