どんな実施する二つのパススキャナ用フレックス?
-
01-07-2019 - |
質問
ペットとしてプロジェクトは、いままでの実施により、基本的な言語での自分のデザインとして使用できるウェブ上のスクリプト言語です。この些細な実行にはC++のプログラムとしてApacheがCGIの仕事をいかに構文解析の入力ファイルを含む非コード(HTML/CSS)やサーバサイドコードです。
私の学部コンパイラのコースを使用しました フレックス や バイソン を生成するスキャナとパーザのための簡単な言語です。このコピー文を書いたパーサがその翻訳、単語の簡単な組み立て可能なサニテーションシステムの機です。Flexはスキャナtokenizesの入力パスにトークンのバイソンパーサです。
の違いが何を思っているようにPHP、この言語がHTMLをマークアップのスクリプト言語を列は次のように:
<p>Hello,
<? echo "World ?>
</p>
私の誤りとすることが効率的に構文解析の入力ファイルとして
- スキャン入力までのスクリプト開始タグが見つから('
- 第二にスキャナtokenizesのサーバ側のスクリプトの入力ファイルのタグ:")はすべて通過させるためのトークンのパーサで、する必要がありませんのことを知ってよかった、自分のマークアップのファイルです。
- 制御が返される最初のスキャナに続くこの一般的パターンです。
基本的には、最初のスキャナーのみを別のマークアップ(されたものではなく、直接ブラウザの変更、コードは、渡された第二のスキャナー、tokenizesのコードおよびパスにトークンのパーサです。
この ない 固体デザインパターンをどのように言語などのPHP対応スキャン入力と解析コードを効率的に?
解決
お見たいと思い始めます。例えば:
"<?" { BEGIN (PHP); }
<PHP>[a-zA-Z]* { return PHP_TOKEN; }
<PHP>">?" { BEGIN (0); }
[a-zA-Z]* { return HTML_TOKEN; }
する状態で0を使用し始めにマクロに変更。合わせ再みながら、特定の状態、接頭辞のの名称に囲まれた角度ットに固定して使用します。
上記の例では、"PHP"です。"PHP_TOKEN"と"HTML_TOKEN"は_%token_sで定義されるようyaccファイルです。
他のヒント
PHPな差別化との間で走査、マークアップ等を行っています。その出力をバッファの場合のマークアップモード、スイッチを構文解析時にコードモードになります。必要な二つのパススキャナなどをすることができますことか単一レクサーフレックス.
ご興味のある方はどPHPは、ダウンロードを試してみPHP4ソースがたくさんしてわかりやすい).したいものを見て、Zendディレクトリ zend_language_scanner.l
.
を記述ういうお考えのフレックスカルは、碁と何か現代のように Aoetools.かくやすく、わかりやすいのマクロに使われていlex文法は非常に混乱やハードの読みになりました組み込みデバッガ(AntlrWorks でんで過ごす時間を見る3Megデバッグファイルです。また多くの言語(Java,c#,C,Python,Actionscript)は、優れた図書にも載すべき、実行時エラーを解決します。