challenge BFコンパイラー

「どう書く?」でまだ出ていないのが不思議なお題。それがBF処理系。 ここでは、BFで書かれたソースを、同じ言語に変換するコンパイラーを募集します。

私自身、すでにPerlとJavaScriptに関しては http://blog.livedoor.jp/dankogai/archives/50545151.html でやっているのですが、他の言語バージョンも是非見たいので。

Dan the Brainf.ucker

以下のように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 - R

Wikipediaの説明をそのままコードにしただけですが・・・
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
bf <- function(str){
    cat("ptr <- 1", "\n")
    cat("buf <- numeric(1)", "\n")
    for(c in unlist(strsplit(str, ''))){
        switch(c,
            '>' = cat("ptr <- ptr+1; if(is.na(buf[ptr])) buf[ptr] <- 0", "\n"),
            '<' = cat("ptr <- ptr-1; if(is.na(buf[ptr])) buf[ptr] <- 0", "\n"),
            '+' = cat("buf[ptr] <- buf[ptr]+1", "\n"),
            '-' = cat("buf[ptr] <- buf[ptr]-1", "\n"),
            '.' = cat("cat(rawToChar(as.raw(buf[ptr])))", "\n"),
            ',' = cat("buf[ptr] <- as.integer(charToRaw(readLines(n=1)))", "\n"),
            '[' = cat("while(buf[ptr]){", "\n"),
            ']' = cat("}", "\n"))
    }
}

Index

Feed

Other

Link

Pathtraq

loading...