brainspace : brainfuck to whitespace

whitespace のコードはちょっと書きにくいので、brainfuckソースコードを whitespace に翻訳するプログラムを作った。brainfuck は書けるけど、whitespace はちょっと……という人向け。

http://dame.dyndns.org/misc/brainspace/

brainfuck のコードに whitespace で注釈をつけるプログラム、とも言える。whitespace は読めるけど brainfuck はちょっと……という人にも。

出力が莫大なので、サンプルは続きに。

>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]>++++++++[<++++>-]<
.#>+++++++++++[<+++++>-]<.>++++++++[<+++>-]<.+++.------.--------.[-]>++++++++[<+
+++>-]<+.[-]++++++++++.

を、

ここから   
   	               
   
		 >   	
	   +++++++++ 
  
 			   	  	
	   		 [
   
 
 			
	  	
<   	
	  	++++++++ 
  
 			   	   
	   		 >   	
	   - 
  
 			   	
	  			 ]
 
 

   	
<   	
	  	. 
 				
  >   	
	   +++++++ 
  
 			   			
	   		 [
   	 
 
 			
	  		
<   	
	  	++++ 
  
 			   	  
	   		 >   	
	   - 
  
 			   	
	  			 ]
 
 	 

   		
<   	
	  	+ 
  
 			   	
	   		 . 
 				
  +++++++ 
  
 			   			
	   		 . 
 				
  . 
 				
  +++ 
  
 			   		
	   		 . 
 				
  [
   	  
 
 			
	  	 	
- 
  
 			   	
	  			 ]
 
 	  

   	 	
>   	
	   ++++++++ 
  
 			   	   
	   		 [
   		 
 
 			
	  			
<   	
	  	++++ 
  
 			   	  
	   		 >   	
	   - 
  
 			   	
	  			 ]
 
 		 

   			
<   	
	  	. 
 				
  #>   	
	   +++++++++++ 
  
 			   	 		
	   		 [
   	   
 
 			
	  	  	
<   	
	  	+++++ 
  
 			   	 	
	   		 >   	
	   - 
  
 			   	
	  			 ]
 
 	   

   	  	
<   	
	  	. 
 				
  >   	
	   ++++++++ 
  
 			   	   
	   		 [
   	 	 
 
 			
	  	 		
<   	
	  	+++ 
  
 			   		
	   		 >   	
	   - 
  
 			   	
	  			 ]
 
 	 	 

   	 		
<   	
	  	. 
 				
  +++ 
  
 			   		
	   		 . 
 				
  ------ 
  
 			   		 
	  			 . 
 				
  -------- 
  
 			   	   
	  			 . 
 				
  [
   		  
 
 			
	  		 	
- 
  
 			   	
	  			 ]
 
 		  

   		 	
>   	
	   ++++++++ 
  
 			   	   
	   		 [
   			 
 
 			
	  				
<   	
	  	++++ 
  
 			   	  
	   		 >   	
	   - 
  
 			   	
	  			 ]
 
 			 

   				
<   	
	  	+ 
  
 			   	
	   		 . 
 				
  [
   	    
 
 			
	  	   	
- 
  
 			   	
	  			 ]
 
 	    

   	   	
++++++++++ 
  
 			   	 	 
	   		 . 
 				
  


ここまで

にしてくれる。

今朝できたてのほやほや。使用言語は bf2c と同じく HaskellRuby。一発ネタなので特に凝ったことはせず、brainfuck の各命令を whitespace のコード断片に置き換えるだけ (一応、連続する '+' '-' '>' '<' をまとめるだけはやった) 。beef (brainfuck インタプリタ) と wspace (whitespace インタプリタ) で動作確認。

$ beef hello.bf
Hello World!
$ ./Brainspace < hello.bf > hello.ws
$ wspace hello.ws
Hello World!

ちなみに、brainfuck で意味のある文字と whitespace で意味のある文字は当然 disjoint なので、

$ beef hello.ws
Hello World!

も動く。発展させて、「普通の C 言語のソースに見えるけど、実は whitespace で実行すると秘密のメッセージが表示される」みたいな透かしを入れると面白いかもね。