FreeBASIC マニュアルのトップに戻る

FreeBASIC DevFbcParser

目次→FreeBASIC のハッキング→FreeBASIC でのハッキングのための情報Purpose←オリジナル・サイト

構文解析ツール



fb.bas: コンパイラーの主モジュール、parser/lexer/AST/IR/emitters の親モジュール、最上位ファイル および インクルード・ファイル操作
parser*.bas: Parsing/compilation functions: lexer tokens -> AST nodes.
symb*.bas: シンボルテーブルと検索、名前空間/範囲操作。
rtl*.bas: rtlib/gfxlib 関数に AST 呼び出しを構築するためのヘルパー。

パーサーの構造は、FreeBASIC の文法 と、非常に接近した関係があります。
基本的に、文法のすべての要素に対応した解析機能があります。

パーサーは、トークンを lexer から取り戻して、入力ソース・コードを確認します。
大部分のエラー・メッセージ(コマンド・ラインとファイル・アクセス・エラー以外)は、ここから来ます。
その上、パーサー機能は、対応する AST を確立します。
これは、コンパイル過程の核心です。

パーサー(というよりは コンパイラー)の関数 (「c」を前に付けられた)の多くは、パーサーの関数が表わす文法要素を解析しスキップします。あるいはパーサーの関数が文法要素を見つけないと、エラーを示します。
ほとんど表現パーサーおよび、#include 解析のために、パーサーは、かなり再帰的です。

解析から放射へ

コードを解析するとき、対応する AST は、プログラムを表現するために確立されます。
AST は、実行コードを表現するのに用いられます。それだけでなく、一時的な式を保持するために用いられます。たとえば、定数の値や、型や手続き宣言を解析している間に見つけたイニシャライザを、保持します。
AST は、IF、DO/LOOP、GOTO、RETURN、EXIT DO などのような、コード・フロー構成のための、ノードを含みません。しかし、AST は、ラベルと枝を含みます。
同様に、いくつかの操作(IIF()、ANDALSO、ORELSE、フィールド参照、メンバー・アクセスのような)は、AST により、対応する低レベルの操作のセットに取り替えられます。

関数を解析した後、この関数用の AST は、最適化され、次に、各ノード上の astLoad*() 呼び出しを通して、再帰的に、上から下に放射されます。
各 AST ノードは、それぞれ astLoad() の、AST ノード自身の実装をしていることに、注意してください。

FreeBASIC の開発者用情報 に戻る
目次に戻る
ページ歴史:2019-02-16 20:26:24
日本語翻訳:WATANABE Makoto、原文著作者:DkLwikki

ホームページのトップに戻る

表示-非営利-継承