• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Brainfuck Compiler on PHP

php 搞代码 3年前 (2022-01-23) 16次浏览 已收录 0个评论
A PHP implement for Brainfuck Compiler

<?php/**Brainfuck Compiler on PHP
Copyright 2015 Everstray Jun Sinri Edogawa**/$bc=new BrainfuckCompiler();$bc->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){					//her本文来源gaodai#ma#com搞@@代~&码*网/搞gaodaima代码e it is					break;				}			}			$this->code_index=$i+1;		}else{			$this->code_index+=1;		}	}}?>

版权声明:本文为博主原创文章,未经博主允许不得转载。

以上就介绍了Brainfuck Compiler on PHP,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Brainfuck Compiler on PHP
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址