Ejemplo n.º 1
0
void
outcmd(int ch, int count)
{
    switch(ch) {
    case '!':
	if (bytecell) { ctype = "byte"; vmask = 255; }

	printf( "%s%d%s%s%s%d%s%s%s",
		"package main\n"
		"import(\"fmt\"\n"
		"    \"os\")\n"
		"var m [",tapesz,"]", ctype, "\n"
		"var p = ",tapeinit,"\n"
		"var v ", ctype, "\n"
		"func main() {\n"
		);
	ind++;
	break;

    case '~':
	I; printf("os.Exit(0)\n");
	ind--;
	printf("}\n");
	break;

    case '=': I; printf("m[p] = %d\n", count & vmask); break;
    case 'B':
	I; printf("v = m[p]\n");
	break;
    case 'M': I; printf("m[p] = m[p]+v*%d\n", count & vmask); break;
    case 'N': I; printf("m[p] = m[p]-v*%d\n", count & vmask); break;
    case 'S': I; printf("m[p] = m[p]+v\n"); break;
    case 'Q': I; printf("if v != 0 { m[p] = %d }\n", count & vmask); break;
    case 'm': I; printf("if v != 0 { m[p] = m[p]+v*%d }\n", count & vmask); break;
    case 'n': I; printf("if v != 0 { m[p] = m[p]-v*%d }\n", count & vmask); break;
    case 's': I; printf("if v != 0 { m[p] = m[p]+v }\n"); break;

    case 'X':
	I; printf("fmt.Fprintf(os.Stderr, \"Aborting Infinite Loop.\\n\")\n");
	I; printf("os.Exit(1)\n");
	break;

    case '+': I; printf("m[p] += %d\n", count & vmask); break;
    case '-': I; printf("m[p] -= %d\n", count & vmask); break;
    case '<': I; printf("p -= %d\n", count); break;
    case '>': I; printf("p += %d\n", count); break;
    case '[':
	I; printf("for m[p] != 0 {\n");
	ind++;
	break;
    case ']':
	ind--; I; printf("}\n");
	break;
    case '.': I; printf("fmt.Print(string(m[p]))\n"); break;
    case '"': print_cstring(); break;
    case ',': I; printf("fmt.Scanf(\"%%c\", &m[p])\n"); break;
    }
}
Ejemplo n.º 2
0
void
outcmd(int ch, int count)
{
    switch(ch) {
    case '!':
	printf( "%s%d%s%d%s",
		"<?php\n"
		"$m=array_fill(0, ",tapesz,", 0);\n"
		"$p=",tapeinit,";\n");
	break;

    case '=': I; printf("$m[$p] = %d;\n", count); break;
    case 'B':
	if(bytecell) { I; printf("$m[$p] &= 255;\n"); }
	I; printf("$v = $m[$p];\n");
	break;
    case 'M': I; printf("$m[$p] = $m[$p]+$v*%d;\n", count); break;
    case 'N': I; printf("$m[$p] = $m[$p]-$v*%d;\n", count); break;
    case 'S': I; printf("$m[$p] = $m[$p]+$v;\n"); break;
    case 'Q': I; printf("if ($v != 0) $m[$p] = %d;\n", count); break;
    case 'm': I; printf("if ($v != 0) $m[$p] = $m[$p]+$v*%d;\n", count); break;
    case 'n': I; printf("if ($v != 0) $m[$p] = $m[$p]-$v*%d;\n", count); break;
    case 's': I; printf("if ($v != 0) $m[$p] = $m[$p]+$v;\n"); break;

    case 'X': I; printf("fwrite(STDERR, \"Abort: Infinite Loop.\\n\"); exit;\n"); break;

    case '+': I; printf("$m[$p] += %d;\n", count); break;
    case '-': I; printf("$m[$p] -= %d;\n", count); break;
    case '<': I; printf("$p -= %d;\n", count); break;
    case '>': I; printf("$p += %d;\n", count); break;
    case '[':
	if(bytecell) { I; printf("$m[$p] &= 255;\n"); }
	I; printf("while($m[$p] != 0){\n");
	ind++;
	break;
    case ']':
	if(bytecell) { I; printf("$m[$p] &= 255;\n"); }
	ind--; I; printf("}\n");
	break;
    case '.': I; printf("print chr($m[$p]&255);\n"); break;
    case ',': I; printf("$s = fread(STDIN, 1); if(strlen($s)) $m[$p] = ord($s);\n"); break;
    case '"': print_cstring(); break;
    }
}
Ejemplo n.º 3
0
void
outcmd(int ch, int count)
{
    switch(ch) {
    case '!':
	I; printf("PROGRAM-ID. brainfuck.\n");
	I; printf("DATA DIVISION.\n");
	I; printf("WORKING-STORAGE SECTION.\n");

	if (use_decimal) {
	    I; printf("01 DEC-TAPE.\n");
	    I; printf("  02 m    PIC S9(3) OCCURS %d TIMES.\n", tapesz);
	    I; printf("01 p      PIC 9(9) VALUE %d.\n", tapeinit);
	    I; printf("01 v      PIC S9(3).\n");
	    I; printf("01 chr    PIC S9(3) GLOBAL.\n");
	} else if (bytecell) {
	    I; printf("01 CHAR-TAPE.\n");
	    I; printf("  02 m    BINARY-CHAR UNSIGNED OCCURS %d TIMES.\n", tapesz);
	    I; printf("01 p      BINARY-LONG VALUE %d.\n", tapeinit);
	    I; printf("01 v      BINARY-CHAR UNSIGNED.\n");
	    I; printf("01 chr    BINARY-LONG GLOBAL.\n");
	} else {
	    I; printf("01 WORD-TAPE.\n");
	    I; printf("  02 m    BINARY-LONG OCCURS %d TIMES.\n", tapesz);
	    I; printf("01 p      BINARY-LONG VALUE %d.\n", tapeinit);
	    I; printf("01 v      BINARY-LONG.\n");
	    I; printf("01 chr    BINARY-LONG GLOBAL.\n");
	}
	I; printf("01 inpl   PIC X(%d) GLOBAL.\n", maxinpline);
	I; printf("01 goteof PIC 9 GLOBAL.\n");
	I; printf("01 gotln  PIC 9 GLOBAL.\n");

	I; printf("PROCEDURE DIVISION.\n");
	break;

    case '~':
	I; printf("STOP RUN.\n");
	   printf("\n");

	if (do_input) {
	    I; printf("PROGRAM-ID. getchr.\n");
	    I; printf("PROCEDURE DIVISION.\n");
	    I; printf("MOVE -1 TO chr\n");
	    I; printf("IF goteof EQUALS 1 THEN\n");
	    I; printf("  EXIT PROGRAM\n");
	    I; printf("END-IF\n");
	    I; printf("IF gotln EQUALS ZERO THEN\n");
	    I; printf("  ACCEPT inpl\n");
	    I; printf("  MOVE 1 TO gotln\n");
	    I; printf("END-IF\n");
	    I; printf("IF inpl EQUALS SPACES THEN\n");
	    I; printf("  MOVE ZERO TO gotln\n");
	    I; printf("  MOVE 10 TO chr\n");
	    I; printf("  EXIT PROGRAM\n");
	    I; printf("END-IF\n");
	    I; printf("MOVE FUNCTION ORD(inpl) TO chr\n");
	    I; printf("SUBTRACT 1 FROM chr\n");
	    I; printf("MOVE inpl (2:) TO inpl\n");
	    I; printf("EXIT PROGRAM.\n");

	       printf("\n");
	    I; printf("END PROGRAM getchr.\n");
	    I; printf("END PROGRAM brainfuck.\n");
	}

	break;

    case '=': I; printf("MOVE %d TO m(p)\n", count); break;
    case 'B':
	I; printf("MOVE m(p) TO v\n");
	break;
    case 'M': I; printf("COMPUTE m(p) EQUAL m(p)+v*%d\n", count); break;
    case 'N': I; printf("COMPUTE m(p) EQUAL m(p)-v*%d\n", count); break;
    case 'S': I; printf("ADD v TO m(p)\n"); break;
    case 'Q':
	I; printf("IF NOT v EQUALS ZERO THEN\n");
	I; printf("  MOVE %d TO m(p)\n", count);
	I; printf("END-IF\n");
	break;
    case 'm':
	I; printf("IF NOT v EQUALS ZERO THEN\n");
	I; printf("  COMPUTE m(p) = m(p)+v*%d\n", count);
	I; printf("END-IF\n");
	break;
    case 'n':
	I; printf("IF NOT v EQUALS ZERO THEN\n");
	I; printf("  COMPUTE m(p) = m(p)-v*%d\n", count);
	I; printf("END-IF\n");
	break;
    case 's':
	I; printf("IF NOT v EQUALS ZERO THEN\n");
	I; printf("  ADD v TO m(p)\n");
	I; printf("END-IF\n");
	break;

    case 'X': I; printf("DISPLAY \"Aborting Infinite Loop.\"\n");
              I; printf("STOP RUN RETURNING 1\n");
              break;

    case '+': I; printf("ADD %d TO m(p)\n", count); break;
    case '-': I; printf("SUBTRACT %d FROM m(p)\n", count); break;
    case '<': I; printf("SUBTRACT %d FROM p\n", count); break;
    case '>': I; printf("ADD %d TO p\n", count); break;
    case '[':
	I; printf("PERFORM UNTIL m(p) EQUALS ZERO\n");
	ind+=2;
	break;
    case ']':
	ind-=2; I; printf("END-PERFORM\n");
	break;

    case '.': I; printf("MOVE m(p) TO chr\n");
	      I; printf("ADD 1 TO chr\n");
	      I; printf("DISPLAY FUNCTION CHAR(chr) WITH NO ADVANCING\n");
	      break;
    case '"': print_cstring(); break;
    case ',':
	      I; printf("CALL 'getchr'\n");
	      I; printf("IF chr GREATER THAN OR EQUAL TO ZERO THEN\n");
	      I; printf("  MOVE chr TO m(p)\n");
	      I; printf("END-IF\n");
	      do_input = 1;
	      break;
    }
}
Ejemplo n.º 4
0
void
outcmd(int ch, int count)
{
    switch(ch) {
    case '!':
	puts("#!/usr/bin/ruby");
	/* Using push is about 20% slower, using a Hash is a LOT slower! */
	if (tapelen > 0)
	    printf("m = Array.new(%d, 0)\n",tapesz);
	else {
	    puts("m = Array.new");
	}
	printf("%s%d%s", "p = ", tapeinit, "\n");
	if (tapelen <= 0)
	    puts("m.push(0) while p>=m.length");
	break;

    case '=': I; printf("m[p] = %d\n", count); break;
    case 'B':
	if(bytecell) { I; printf("m[p] &= 255\n"); }
	I; printf("v = m[p]\n");
	break;
    case 'M': I; printf("m[p] = m[p]+v*%d\n", count); break;
    case 'N': I; printf("m[p] = m[p]-v*%d\n", count); break;
    case 'S': I; printf("m[p] = m[p]+v\n"); break;
    case 'Q': I; printf("m[p] = %d unless v == 0\n", count); break;
    case 'm': I; printf("m[p] = m[p]+v*%d unless v == 0\n", count); break;
    case 'n': I; printf("m[p] = m[p]-v*%d unless v == 0\n", count); break;
    case 's': I; printf("m[p] = m[p]+v unless v == 0\n"); break;

    case 'X': I; printf("raise 'Aborting Infinite Loop.'\n"); break;

    case '+': I; printf("m[p] += %d\n", count); break;
    case '-': I; printf("m[p] -= %d\n", count); break;
    case '<':
	I; printf("p -= %d\n", count);
	curtapeoff -= count;
	break;
    case '>':
	I; printf("p += %d\n", count);
	curtapeoff += count;
	if (tapelen <= 0 && curtapeoff > safetapeoff) {
	    safetapeoff = curtapeoff;
	    I; puts("m.push(0) while p>=m.length");
	}
	break;
    case '[':
	if(bytecell) { I; printf("m[p] &= 255\n"); }
	I; printf("while m[p] != 0\n");
	ind++;
	curtapeoff = safetapeoff = 0;
	break;
    case ']':
	if(bytecell) { I; printf("m[p] &= 255\n"); }
	ind--; I; printf("end\n");
	curtapeoff = safetapeoff = 0;
	break;
    case '"': print_cstring(); break;
    case '.':
	I;
	if(bytecell) printf("putc m[p]\n");
	else         printf("begin print ''<<m[p] rescue putc m[p] end\n");
	break;
    case ',':
	I;
	if (bytecell) printf("m[p] = $stdin.getbyte if !$stdin.eof\n");
	else          printf("m[p] = $stdin.getc.ord if !$stdin.eof\n");
	break;
    }
}
Ejemplo n.º 5
0
void
outcmd(int ch, int count)
{
    int mov = 0;
    char * cm;

    if (tapelen>0) move_opt(&ch, &count, &mov);
    if (ch == 0) return;

    if (!init_done && ch != '!' && ch != '"' && ch != '~')
    {
	/* Using push is about 20% slower, using a Hash is a LOT slower! */
	if (tapelen > 0)
	    printf("m = Array.new(%d, 0)\n",tapesz);
	else {
	    puts("m = Array.new");
	}
	printf("%s%d%s", "p = ", tapeinit, "\n");
	if (tapelen <= 0)
	    puts("m.push(0) while p>=m.length");
	init_done = 1;
    }

    cm = cell(mov);
    switch(ch) {
    case '!':
	puts("#!/usr/bin/ruby");
	break;

    case '=': I; printf("%s = %d\n", cm, count); break;
    case 'B':
	if(bytecell) { I; printf("%s &= 255\n", cm); }
	I; printf("v= %s\n", cm);
	break;
    case 'M': I; printf("%s += v*%d\n", cm, count); break;
    case 'N': I; printf("%s -= v*%d\n", cm, count); break;
    case 'S': I; printf("%s += v\n", cm); break;
    case 'T': I; printf("%s -= v\n", cm); break;
    case '*': I; printf("%s *= v\n", cm); break;

    case 'C': I; printf("%s = v*%d\n", cm, count); break;
    case 'D': I; printf("%s = -v*%d\n", cm, count); break;
    case 'V': I; printf("%s = v\n", cm); break;
    case 'W': I; printf("%s = -v\n", cm); break;

    case 'X': I; printf("raise 'Aborting Infinite Loop.'\n"); break;

    case '+': I; printf("%s += %d\n", cm, count); break;
    case '-': I; printf("%s -= %d\n", cm, count); break;
    case '<':
	I; printf("p -= %d\n", count);
	curtapeoff -= count;
	break;
    case '>':
	I; printf("p += %d\n", count);
	curtapeoff += count;
	if (tapelen <= 0 && curtapeoff > safetapeoff) {
	    safetapeoff = curtapeoff;
	    I; puts("m.push(0) while p>=m.length");
	}
	break;
    case '[':
	if(bytecell) { I; printf("%s &= 255\n", cm); }
	I; printf("while %s != 0\n", cm);
	ind++;
	curtapeoff = safetapeoff = 0;
	break;
    case ']':
	if (count > 0) {
            I; printf("p += %d\n", count);
        } else if (count < 0) {
            I; printf("p -= %d\n", -count);
	}

	if(bytecell) { I; printf("%s &= 255\n", cm); }
	ind--; I; printf("end\n");
	curtapeoff = safetapeoff = 0;
	break;
    case 'I':
	if(bytecell) { I; printf("%s &= 255\n", cm); }
	I; printf("if %s != 0\n", cm);
	ind++;
	curtapeoff = safetapeoff = 0;
	break;
    case 'E':
	if (count > 0) {
            I; printf("p += %d\n", count);
        } else if (count < 0) {
            I; printf("p -= %d\n", -count);
	}
	ind--; I; printf("end\n");
	curtapeoff = safetapeoff = 0;
	break;
    case '"': print_cstring(); break;
    case '.':
	I;
	if(bytecell) printf("putc %s\n", cm);
	else printf("begin print '' << %s rescue putc %s end\n", cm, cm);
	break;
    case ',':
	I;
	if (bytecell) printf("%s = $stdin.getbyte if !$stdin.eof\n", cm);
	else          printf("%s = $stdin.getc.ord if !$stdin.eof\n", cm);
	break;
    }
}
Ejemplo n.º 6
0
void
loutcmd(int ch, int count, struct instruction *n)
{
    switch(ch) {
    case '!':

	if (bytecell) {
	    printf("%s%d%s%d%s",
			"import java.io.InputStream;"
		"\n"	"import java.io.OutputStream;"
		"\n"	"import java.io.IOException;"
		"\n"
		"\n"	"public class f**k {"
		"\n"	"    static byte[] m;"
		"\n"	"    static int p;"
		"\n"	"    static byte v;"
		"\n"
		"\n"	"    private static void i() {"
		"\n"	"        try {"
		"\n"	"            System.in.read(m,p,1);"
		"\n"	"        } catch (IOException e) {}"
		"\n"	"    }"
		"\n"
		"\n"	"    private static void o() {"
		"\n"	"//        try {"
		"\n"	"            System.out.write(m[p]);"
		"\n"	"            System.out.flush();"
		"\n"	"//        } catch (IOException e) {}"
		"\n"	"    }"
		"\n"
		"\n"	"    public static void main(String[] args) {"
		"\n"	"        m=new byte[",tapesz,"];"
		"\n"	"        p=",tapeinit,";"
		"\n");

	} else {
	    printf("%s%d%s%d%s",
			"import java.io.InputStream;"
		"\n"	"import java.io.OutputStream;"
		"\n"	"import java.io.IOException;"
		"\n"
		"\n"	"public class f**k {"
		"\n"	"    static int[] m;"
		"\n"	"    static int p;"
		"\n"	"    static int v;"
		"\n"	"    static byte ch;"
		"\n"
		"\n"	"    private static void i() {"
		"\n"	"        try {"
		"\n"	"            v = System.in.read();"
		"\n"	"            if (v>=0) m[p] = v;"
		"\n"	"        } catch (IOException e) {}"
		"\n"	"    }"
		"\n"
		"\n"	"    private static void o() {"
		"\n"	"        ch = (byte) m[p];"
		"\n"	"        System.out.write(ch);"
		"\n"	"        System.out.flush();"
		"\n"	"    }"
		"\n"
		"\n"	"    public static void main(String[] args) {"
		"\n"	"        m=new int[",tapesz,"];"
		"\n"	"        p=",tapeinit,";"
		"\n");
	}

	ind+=2;
	break;

    case '~':
	ind--;
	I; printf("}\n");
	ind--;
	I; printf("}\n");
	break;

    case '@':
	I; printf("bf%d();\n", count);
	break;

    case '{':
	I; printf("private static void bf%d() {\n", count);
	ind++;
	break;

    case '}':
	ind--;
	I; printf("}\n");
	break;

    case '=': I; printf("m[p] = %d;\n", count); break;
    case 'B': I; printf("v = m[p];\n"); break;
    case 'M': I; printf("m[p] += v*%d;\n", count); break;
    case 'N': I; printf("m[p] -= v*%d;\n", count); break;
    case 'S': I; printf("m[p] += v;\n"); break;
    case 'Q': I; printf("if(v!=0) m[p] = %d;\n", count); break;
    case 'm': I; printf("if(v!=0) m[p] += v*%d;\n", count); break;
    case 'n': I; printf("if(v!=0) m[p] -= v*%d;\n", count); break;
    case 's': I; printf("if(v!=0) m[p] += v;\n"); break;

    case 'X': I; printf("throw new IllegalStateException(\"Infinite Loop detected.\");"); break;

    case '+': I; printf("m[p] += %d;\n", count); break;
    case '-': I; printf("m[p] -= %d;\n", count); break;
    case '<': I; printf("p -= %d;\n", count); break;
    case '>': I; printf("p += %d;\n", count); break;

    case '[':
	I; printf("while(m[p] != 0) {\n");
	ind++;
	break;

    case ']':
	ind--;
	I; printf("}\n");
	break;

    case '.': I; printf("o();\n"); break;
    case ',': I; printf("i();\n"); break;

    case '"': print_cstring(n->cstr); break;

    }
}