2012年5月4日金曜日

bf2c.py

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

これはpythonで書いたbfからCへのトランスレータ。wikipediaの解説、そのまま。

import sys

fname = sys.argv[1]

f = open(fname)
source = f.read()
f.close()

header = """
#include

int main(int argc, char**argv){
  char array[30000];
  char *ptr=array;

"""

footer = """
  return 0;
}
"""
mapping = {
  '>':  "++ptr;",
  '<':  "--ptr;",
  '+':  "++*ptr;",
  '-':  "--*ptr;",
  '.':  "putchar(*ptr);",
  ',':  "*ptr=getchar();",
  '[':  "while (*ptr) {",
  ']':  "}",
}

outname = fname[:-2]+'c'

f = open(outname, 'w')
f.write(header)

for c in source:
  o = mapping.get(c, '');
  f.write(o +'\n')

f.write(footer)
f.close()
    

0 件のコメント: