[1263] 状況その3
投稿者:山
2009/05/15 18:56:21
yacc,lecの修正とプリプロセッサの作成が終わりました。ファイルの多重#includeと
多重の#define宣言を処理できるようになりました。
次の3つのファイルをt001.dkmで起動すると。
--ファイルt001.dkm---------------------------
// aaaaaaaa
#include "t001-01.dkm"
#define DEF1 DEF2 + "def1 " // aa
int main()
{
string str;
str = DEF1;
str = DEF2;
str = DEF3;
}
--ファイルt001-01.dkm------------------------
//ssssssssssss
#define DEF2 DEF3 + "def2 " // bb
#include "t001-02.dkm" //aaaa
int print (string str);
--ファイルt001-02.dkm------------------------
//ssssssssssss
#define DEF3 "def3 " // cc
int printnl(string str)
{
print(str + "\n");
}
-------------------------------------
↓
プリプロセッサ
↓
-------------------------------------
int printnl (string str )
{
print (str +"\n");
}
int print (string str );
int main ()
{
string str ;
str ="def3 "+"def2 "+"def1 " ;
str ="def3 "+"def2 " ;
str ="def3 " ;
}
-------------------------------------
になってコンパイラに渡されます。もちろんメモリ渡し、エラーもファイル名+行番号で出さ
れます。コメントやインデントは内部的に不要なので無くなっています。
最上位の制御構造がマルチスレッドを意識した構造を作りこみ、コンパイラは単独で動作する
構造になりつつあります。ジェネレータは関数単位で実行される予定です。
これでようやく中断前に戻れます。
関数のリンクは総て動的リンクにする予定です。最初の1回だけ動的リンクが行われ、その後
コンパイラが起動されるか、中間コードが破棄された時のみ再度動的リンク試験が行われます。
これでほとんどの関数コールは、直接起動されることになり。スピード的に問題ないと思って
います。