ブログトップ 記事一覧 ログイン 無料ブログ開設

おびなたん☆

1981 | 11 |
2004 | 08 | 09 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 11 | 12 |
2010 | 01 | 02 | 03 | 05 | 12 |
2011 | 02 | 03 | 05 | 07 |
2012 | 02 |

Sep 25, 2006. Mon

[]KEMURIコンパイラ

プログラミング言語 KEMURI の世界で最初の最適化コンパイラを作りました。

KEMURI

mixiにKEMURIのコミュニティも作りました。

コンパイラのソースと実行

最適化の理屈は、まあ読めばわかるでしょう。

エラー処理はほとんど施していません。クラッシュさせようと思えば、簡単に出来てしまいます。

/* k2c.c */
#include <stdio.h>
#include <string.h>
#include <ctype.h>

int main(int argc, char *argv[])
{

    printf("#include <stdio.h>\n");
    printf("int main(int argc, char* argv[]) {\n");

    char strage[1024] = {'\0'};
    char c, *t;

    t = strage;

    while (c = getchar(), c != EOF) {
        char *h;
        h = t - 1;

        switch (c) {
        case '`':
            strcpy(t, "!dlrow ,olleH");
            t += 13;
            break;
        case '~':
            *h = ~(*h);
            break;
        case '^':
            *(h - 1) ^= *h;
            *h = '\0';
            t--;
            break;
        case '\"':
            *t = *h;
            t++;
            break;
        case '\'':
            *t = *(t - 1);
            *(t - 1) = *(t - 2);
            *(t - 2) = *(t - 3);
            *(t - 3) = *t;
            *t = '\0';
            break;
        case '|':
            printf("printf(\"");
            while (t != strage && *(--t)) {
                putchar(isprint(*t)? *t: '.');
            };
            printf("\");\n");
            break;
        default:
            break;
        }

    };

    printf("putchar('\\n');\n");
    printf("return 0;");
    printf("}\n");

    return 0;
}
#!/bin/sh
# kc - KEMURI Compiler script

cat $1 | k2c > $1.tmp.c
cc $1.tmp.c

rm -f $1.tmp.c
% cc -o k2c k2c.c
% cat hoge.kmr
`|``|
% kc hoge.kmr
% ./a.out
Hello, world!Hello, world!Hello, world!
%

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/earth2001y/20060925/p1