brainf_compiler.sf 597 B

1234567891011121314151617181920212223242526
  1. #!/usr/bin/ruby
  2. # Execute Brain**** code, by first translating it into Sidef code.
  3. # Translation of:
  4. # https://rosettacode.org/wiki/Execute_Brain****/Ruby
  5. var code = ('var(p=0,m=[]);' + ARGF.slurp.gsub(
  6. /(.)/s, {|c|
  7. :(
  8. '>' => 'p++;',
  9. '<' => 'p--;',
  10. '+' => '(m[p]:=0)++;',
  11. '-' => '(m[p]:=0)--;',
  12. '[' => 'do{',
  13. ']' => '}while((m[p]&=255)!=0);',
  14. '.' => '(m[p]&=255).chr.print;',
  15. ',' => 'STDIN.eof||(m[p]=STDIN.getc.ord)'
  16. ){c} || ''
  17. }
  18. ))
  19. say code
  20. say '__END__'
  21. eval code