2007/02/10

コンパイラ近況 その1

本日は、昨日のブログで宣言したメインテーマと早速 違う議題 にします(ぉ
 
今、複数の判定文が入り乱れるときの処理にすごい悩んでます。
例えばこういう場合↓
 var a, b;
 if( (a==0 && b==0) || (a==-1 && b==-1) ){
 
ジャンプ命令の生成(※1) をする時どんどん複雑になっていくのですよ( ´д`)

ここ2日間色々やって、下記の場合とかは対応できるようになったのですが(※2)
/////////////////////////////////////////////////////
 if( a==0 || a==-1 && b==-1 )
 if( a==0 && a==-1 || b==-1 )
 if( (a==0 && a==-1) || b==-1 )
 if( a==0 || a==-1 &&  b==-1 )

 if( (a==0 || a==-1) &&  b==-1 )
/////////////////////////////////////////////////////
      ※1 ジャンプ命令とはアセンブルコードのお話で、ここでは
          C言語の goto 命令と思って下さい。
      ※2 書いているコードに意味はありません。

今の実装では、判定文の解析が一時凌ぎに過ぎないのがよく身に染みました( ´д⊂
しかし色々考え作っていくと普通の C/Javaコンパイラと遜色の無いものになってしまうし、
そこまでの気力は無いのでここは【妥協】しようと思っています。
 
【独自コンパイラ(仮)の妥協案 その1】
◆ if/while には一つの条件しかかけない。
 
もちろん下記のように else / else if などが込み合った場合は通常どおり
サポートしています。
////////////////////////////////////////////////////////
 if( !a ){
    if( b ){
    }else{
    }
 }else if( a==1 ){
    if( b ){
    }else{
    }
 }else if( a==2 ){
    if( b ){
    }else{
    }
 }else{
 }
////////////////////////////////////////////////////////
 
今日は唐突に if文の近況ついて書きましたが、次はサポートしている命令/構文でもかこうと思います~。
コンパイラの仕様詳細については完成が近くなった時にでも紹介しよっかな( ´д`)
 
あーー何か塩ラーメンが食べたくなりますた( ´д`)

0 件のコメント:

コメントを投稿