プ: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
{
m_name=nam
printf("; %s 登録\n"); // ジェネレート後のコメント行
}
// この系で出したいアセンブラを書く
operator += (Reg8 b)
{
printf("adds %s %s\n",this.m_na
}
};
///////////////
このクラスをあてはめて(上記内容をまじめに)書いて実行すると
; areg 登録
; breg 登録
adds areg breg
というようなアセンブラソースを出力する。
その後、アセンブラを通せばできあがりということ。
///////////////
えええーっとこれのどこがエセかというと、
自前コンパイラを作るとした場合の
ソースを読んで文字列を読み解く部分を
ありもののC++を流用している
という、ところが、エセなのだ。