RSS

 

RSS


プ:ECO#4 ジェネレータ

  • いわいまさか
  • at 2011/12/07 07:42:55

プ:ECO#1
プ:ECO#2
プ:ECO#3
に続いての第4弾
前回からのつづき

Reg8 areg("areg");
Reg8 breg("breg");
(ここになんらかのareg,bregを設定する処理)
areg+=breg;

こんな、ソースがあった場合に
「2.そのソースがそのまま使えるソースジェネレータを書く」のだ。


class Reg8
{
    const  char *m_name;
//     int m_value;  ジェネレータなのでマジの値はいらない

  Reg8(const char *name)
 {
    m_name=name; 
  printf("; %s 登録\n");  // ジェネレート後のコメント行
 }

// この系で出したいアセンブラを書く
 operator += (Reg8 b)
{
 printf("adds %s %s\n",this.m_name,b.m_name);

};

///////////////////////////////////////

このクラスをあてはめて(上記内容をまじめに)書いて実行すると

;  areg 登録
;  breg 登録
adds  areg  breg

というようなアセンブラソースを出力する。
その後、アセンブラを通せばできあがりということ。

///////////////////////////////////////

えええーっとこれのどこがエセかというと、
自前コンパイラを作るとした場合の
ソースを読んで文字列を読み解く部分を

ありもののC++を流用している

という、ところが、エセなのだ。


  • コメント (0)
  • トラックバック (0)
トラックバックURL :
http://www.iwai-masaka.jp/tb.cgi/55519