ペット プロジェクトとして、Web スクリプト言語として使用できる、独自の設計による基本的な言語の実装を試みたいと考えています。C++ プログラムを Apache CGI として実行するのは簡単なので、実際の作業は、非コード (HTML/CSS マークアップ) とサーバー側コードを含む入力ファイルを解析する方法にあります。
学部生のコンパイラ コースでは、FlexとBisonを使用して、単純な言語のスキャナーとパーサーを生成しました。私たちは文法のコピーを受け取り、単純な言語を仮想マシン用の単純なアセンブリに変換するパーサーを作成しました。flex スキャナーは入力をトークン化し、トークンを Bison パーサーに渡します。
それと私がやりたいことの違いは、PHP のように、この言語にはプレーンな HTML マークアップと、次のように散在するスクリプト言語を含めることができるということです。
<p>Hello,
<? echo "World ?>
</p>
次のように入力ファイルを解析するのが効率的であると仮定するのは間違っていますか?
- スクリプト開始タグが見つかるまで入力をスキャンします ('
- 2 番目のスキャナーは、入力ファイルのサーバー側スクリプト セクションを (開始タグ: '' から) トークン化し、そのトークンをパーサーに渡します。パーサーは、ファイル内のマークアップについて知る必要はありません。
- 制御は、この一般的なパターンを継続する最初のスキャナーに戻されます。
基本的に、最初のスキャナーは、マークアップ (変更されずにブラウザーに直接返される) と、2 番目のスキャナーに渡されるコードのみを区別します。2 番目のスキャナーは、コードをトークン化し、トークンをパーサーに渡します。
これが堅実な設計パターンでない場合、PHP などの言語はどのようにして入力のスキャンとコードの解析を効率的に処理するのでしょうか?