2009年01月27日 02:45 [Edit]

javascript - てってってー言語を移植してみた

感嘆しかつ簡単だったので。

プログラム言語「てってってー」 - H.Hiroのチラシの裏の裏
Brainf*ckのパクリですが、若干拡張仕様があります。

  • ベースは
  • 拡張仕様(ー〜てー)がなければ素直にてってってー → Br@inf.ck → JavaScript ですんだのだけど。
  • コメント処理など、あまりてってってー的でないところもあります。
BF Source
入力

出力

実行時間
Compiled てってってー

Unlambdaから「ののワさん」とか「まっすぐ」を何言語からひねりだすとかは各自の宿題とします。

Dan the Br@infu.ker


function Tettettee(str){
    this.code = []; this.output = []; this.input = [];
    this.pc = this.sp = 0;
    this.debug  = 0;
    this.js = '';
    this.timer = 0;
     this.init = function(str){
        str = str.replace(/[  ]*\{[^\}]+\}/g, '');
        str = str.replace(/(ー.*?てー|ててー|てっー|てってー|てっててー|てってっー|てってってー|てってっててー|てってってっー)/g, function(c){
          switch (c) {
            case 'てってー' : return 'sp++;\n';
            case 'てっててー' : return 'sp--;\n';
            case 'ててー' : return 'data[sp]++;\n';
            case 'てっー' : return 'data[sp]--;\n';
            case 'てってっー' : return 'output.push(data[sp++]);\n';
            case 'てってってー' : return 'data[sp++]=input.shift();\n';
            case 'てってっててー' : return 'while(data[sp]){\n';
            case 'てってってっー' : return '}\n';
            default: 
                return 'for(var j = 1; j < \'' + c + '\'.length-2; j++)'
                    + 'data[sp++] = \'' + c + '\'.charCodeAt(j);\n';
          };
        });
        str = 'var data = [];\nvar output = [];\nvar sp = 0;\n'
            + 'for(var i = 0; i < 65536; i++) data.push(0);\n'
            +  str + 'return output;\n';
        try{
           // this.code = eval(str);
           this.js = this.code = new Function('input', str);
        }
        catch(e){
          alert(e + "\n" + str);
        }
        this.input = [];
    };
    this.stdin = function(str){
        for (var i = 0; i < str.length; i++){
            this.input.push(str.charCodeAt(i));
        }
    };
    this.stdout = function(){
        var str = '';
        for (var i = 0; i < this.output.length; i++){
            str += String.fromCharCode(this.output[i]);
        }
        return str;
    };
    this.run = function(){
        var start     = (new Date()).getTime();
        this.output = this.code(this.input);
        this.timer = ((new Date()).getTime() - start)/1000;
    }
    this.init(str);
}

この記事へのトラックバックURL

この記事へのトラックバック
巷では空前のBrainf*ckブームっぽい。 で、その派生言語であるところの、「てってってー言語」というのが話題っぽかったのでPerlで実装してみました。 いろいろ突っ込みお待ちしてます。 あと、(俺|私)もこんな言語で実装したよ!とかいうのあったら教えてくれるとうれ...
巷で話題のニクイ奴をPerlで実装してみた【にひりずむ::しんぷる】at 2009年01月29日 19:51
何かを受信(^o^)ノ プログラム言語「てってってー」 javascript - てってってー言語を移植してみた - 404 Blog Not Found Wikipedia - Brainf*ck というわけで、C#erな自分はC#で「てってってー言語」のインタプリタを書いてみました。 基本「Brainf*ck」のモシャスというこ
[プログラミング][C#2.0][C#3.0]さっそくC#でプログラム言語「てってってー」のインタプリタを書いたよ【Bug Catharsis】at 2009年01月29日 02:24
Business Media 誠:夜中まで延々13時間……マンション投げ売りで“暴走” (1/2) (tags: マンション 不動産) 米全世帯の約5.7%が地デジ移行の準備まだ――米Nielsen調査 - ITmedia News ...
links for 2009-01-27【blue log 2nd】at 2009年01月28日 10:33
この記事へのコメント
これ、何を入力しても
「てってってーてってっててー」になってしまうんですけど、
ブラウザのせいでしょうか?(Safari)
Posted by しんいち at 2009年02月02日 01:21
"てってってー"を見たとき、
Deep PurpleのSmoke on the water
だと思った。
Posted by rin at 2009年01月27日 13:57