compile('++++++++++[>+++++++>++++++++++>+++>+++.>+.+++++++..+++.>++..+++.------.--------.>+.>.');/**字符 含义> 指针加一'; public static $ptr_left ='0,0=>0,1=>0); private $codes=array(); private $code_index=0; public function compile($program_code){ $this->codes=str_split($program_code); $this->code_index=0; while($this->code_indexcodes)){ $this->process_code(); } } private function process_code(){ if(brainfuckcompiler::$debug_mode){ echo [debug] process_code at .$this->code_index; } $code=$this->codes[$this->code_index]; if(brainfuckcompiler::$debug_mode){ echo as .$code.php_eol; } if($code===brainfuckcompiler::$ptr_right){ $this->act_ptr_right(); $this->code_index+=1; } elseif($code===brainfuckcompiler::$ptr_left){ $this->act_ptr_left(); $this->code_index+=1; } elseif($code===brainfuckcompiler::$val_plus){ $this->act_val_plus(); $this->code_index+=1; } elseif($code===brainfuckcompiler::$val_minus){ $this->act_val_minus(); $this->code_index+=1; } elseif($code===brainfuckcompiler::$ptr_output){ $this->act_ptr_output(); $this->code_index+=1; } elseif($code===brainfuckcompiler::$ptr_input){ $this->act_ptr_input($this->codes[$this->code_index+1]); $this->code_index+=2; } elseif($code===brainfuckcompiler::$while_begin){ $this->act_while_begin(); } elseif($code===brainfuckcompiler::$while_end){ $this->act_while_end(); } } private function act_ptr_right(){ $this->ptr+=1; if(!isset($this->memory[$this->ptr])){ $this->memory[$this->ptr]=0; } } private function act_ptr_left(){ $this->ptr-=1; if(!isset($this->memory[$this->ptr])){ $this->memory[$this->ptr]=0; } } private function act_val_plus(){ $this->memory[$this->ptr]=($this->memory[$this->ptr]+1)%256; } private function act_val_minus(){ $this->memory[$this->ptr]=($this->memory[$this->ptr]-1)%256; } private function act_ptr_output(){ echo chr($this->memory[$this->ptr]); } private function act_ptr_input($value){ $this->memory[$this->ptr]=($value%256); } private function act_while_begin(){ if($this->memory[$this->ptr]===0){ //find the pair while_end $pair=1; $i=0; for($i=$this->code_index+1;$icodes);$i++){ if($this->codes[$i]===brainfuckcompiler::$while_begin){ $pair+=1; }elseif($this->codes[$i]===brainfuckcompiler::$while_end){ $pair-=1; } if($pair==0){ //here it is break; } } $this->code_index=$i; }else{ $this->code_index+=1; } } private function act_while_end(){ if($this->memory[$this->ptr]!==0){ //find the pair while_begin $pair=1; $i=0; for($i=$this->code_index-1;$i>=0;$i--){ if($this->codes[$i]===brainfuckcompiler::$while_end){ $pair+=1; }elseif($this->codes[$i]===brainfuckcompiler::$while_begin){ $pair-=1; } if($pair==0){ //here it is break; } } $this->code_index=$i+1; }else{ $this->code_index+=1; } }}?>
版权声明:本文为博主原创文章,未经博主允许不得转载。
以上就介绍了brainfuck compiler on php,包括了方面的内容,希望对php教程有兴趣的朋友有所帮助。