4223
|
1 #!/usr/local/bin/ploki
|
|
2 REM brainfuck to c translator
|
|
3
|
|
4 INSERT perl-util.pk HERE
|
|
5
|
|
6 LET tr("[") "while (*p) {\n"
|
|
7 LET tr("]") "}\n"
|
|
8 LET tr("<") "--p;\n"
|
|
9 LET tr(">") "++p;\n"
|
|
10 LET tr("+") "++*p;\n"
|
|
11 LET tr("-") "--*p;\n"
|
|
12 LET tr(".") "putchar(*p);\n"
|
|
13 LET tr(",") "*p = getchar();\n"
|
|
14 LET tr("0") "*p = 0;\n"
|
|
15
|
|
16 "#include <stdio.h>\nint main(void) {\nstatic unsigned char A[30000];\nunsigned char *p = A;\n" _ @s///g #<@clean @balanced @s///g #<@input \ARG:1 "'^[]<>.,+-'+" ""#> "'[]<>.,0+-'" @OMFG tr(\@)#> _ "return 0;\n}\n"
|
|
17 END
|
|
18
|
|
19 FOR clean LEET s \@
|
|
20 LEET $c$ 0
|
|
21 10 LET s @s///g #<@s///g #<s "{^|]!}[!'^[]'*]!" @OMFG @countrepl \0#> "{(^|]!)[!'^]'*}[!'^[]'*]!" @OMFG @countrepl \0#>
|
|
22 IF $c$
|
|
23 LET $c$ 0
|
|
24 GOFOR 10
|
|
25 FI
|
|
26 KTHX @s///g #<s "[!'+-']!" "0"#>
|
|
27
|
|
28 FOR countrepl LET $c$ += 1
|
|
29 KTHX \@
|
|
30
|
|
31 FOR balanced LEET s @s///g #<\@ "'^[]'+" ""#>
|
|
32 LEET $c$ 0
|
|
33 10 LET s @s///g #<s "[!]!" @OMFG @countrepl ""#>
|
|
34 IF $c$
|
|
35 LET $c$ 0
|
|
36 GOFOR 10
|
|
37 FI
|
|
38 IF s ; ""
|
|
39 IACS "\V\ARG:0: error: unbalanced brackets
|
|
40 FI
|
|
41 KTHX \@
|
|
42
|
|
43 FOR input LEET fh
|
|
44 IF @TYPE OF \@ : "nothing"
|
|
45 LET fh \EING
|
|
46 ELSE
|
|
47 LET fh @LAPERS \@
|
|
48 IF @NOT fh
|
|
49 IACS "\V\ARG:0: \V\@: \V\!
|
|
50 FI
|
|
51 FI
|
|
52 KTHX fh . @NEG 1
|