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 - Perl
以下のように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!
|
正規表現とハッシュの合わせ技で
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 35 36 37 38 | use strict;
use warnings;
sub compile {
my $source = shift;
my $out = '';
my $code = 'sub{no warnings;my(@t, $p, @o);';
my %patterns = (
'>' => sub { sprintf '$p+=%d;', length $_[0] },
'<' => sub { sprintf '$p-=%d;', length $_[0] },
'+' => sub { sprintf '$t[$p]+=%s;', length $_[0] },
'-' => sub { sprintf '$t[$p]-=%d;', length $_[0] },
'.' => sub { sprintf 'push @o,$t[$p];' },
',' => sub { sprintf '$t[$p] = shift;' },
'[' => sub { 'while($t[$p]){' },
']' => sub { '}' },
);
my $re = qr/>+|<+|\++|-+|\.|,|\[|\]/;
my $tmp = $source;
$tmp =~ tr/<>+\-,.[]//cd;
$tmp =~ s/$re/$patterns{substr($&, 0, 1)}->($&)/ge;
$code .= $tmp;
$code .= '@o;}';
}
sub main {
my $source = do { local $/; <> };
my $code = compile($source);
my @out = do { eval $code }->();
print pack('c*', @out);
}
main;
|
strictもwarningsも通るけど一文。
Dan the Brainf.cker
1 2 3 4 5 6 7 8 9 10 11 12 13 | #!/usr/local/bin/perl
use strict;
use warnings;
s/(.)/do{no warnings 'syntax';my %c=qw!
< $p--;
> $p++;
+ $d[$p]++;
- $d[$p]--;
. print(chr$d[$p]);
, $d[$p]=getc;
[ while($d[$p]){
] }
!;\%c}->{$1}/egx and print for(<>);
|




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 ]