BFコンパイラー
以下のようにonelinerで可能です。
ただしLanguage::BF 0.03が必要です。
CodeRepos経由
で、
- svn co svn.coderepos.org/share/lang/perl/Language-BF
- cd Language-BF/trunk
- perl Makefile.PL
- make install
するか、CPANにVersion 0.03が現れるのをお待ち下さい。
Dan the Brainf.cker
1 2 3 4 | perl -MLanguage::BF \
-e 'print Language::BF->new_from_file(shift)->as_perl' t/hello.bf \
| perl
Hello World!
|
Posted feedbacks - Java
引数にBFのプログラムを与えて実行します。 java Sample '>,----------[>,----------]<[++++++++++.<]' BF.javaという名前のファイルが作られるので、さらにjavacでコンパイルします。 上記の例は入力を逆順に出力するプログラム(入力の終了は改行(\n))です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | import java.io.*;
import java.util.*;
public class Sample {
static final String NL = System.getProperty("line.separator");
static final String HEADER = "import java.io.*;"+NL+NL+"public class BF {"+NL+
" static final int SIZE = 32768;"+NL+" static byte[] a = new byte[SIZE];"+NL+
" public static void main(String[] args) throws IOException {"+NL+
"\tBufferedReader r = new BufferedReader(new InputStreamReader(System.in));"+NL+
"\tint ptr = 0;";
static final String FOOTER = "\tSystem.out.println();"+NL+" }"+NL+"}";
static HashMap<Character, String> bfCode = new HashMap<Character, String>();
static {
bfCode.put('>', "\tptr++;");
bfCode.put('<', "\tptr--;");
bfCode.put('+', "\ta[ptr]++;");
bfCode.put('-', "\ta[ptr]--;");
bfCode.put('.', "\tSystem.out.write(a[ptr]);");
bfCode.put(',', "\ta[ptr] = (byte)r.read();");
bfCode.put('[', "\twhile (a[ptr] != 0) {");
bfCode.put(']', "\t}");
}
public static void main(String[] args) throws IOException {
PrintWriter w = new PrintWriter("BF.java");
w.println(HEADER);
for (char c : args[0].toCharArray()) {
String code = bfCode.get(c);
if (code != null)
w.println(code);
}
w.println(FOOTER);
w.close();
}
}
|




dankogai
#3886()
Rating0/2=0.00
「どう書く?」でまだ出ていないのが不思議なお題。それがBF処理系。 ここでは、BFで書かれたソースを、同じ言語に変換するコンパイラーを募集します。
私自身、すでにPerlとJavaScriptに関しては http://blog.livedoor.jp/dankogai/archives/50545151.html でやっているのですが、他の言語バージョンも是非見たいので。
Dan the Brainf.ucker
see: Brainfuck - Wikipedia
1 reply [ reply ]