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

如何使用PHP来写一个简单的解释器

php 搞代码 3年前 (2022-01-21) 12次浏览 已收录 0个评论

这篇文章主要介绍了关于如何使用PHP来写一个简单的解释器,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

偶然间在朋友圈发现有人在看一本《两周自制脚本语言》,觉得写个脚本语言挺不错的,方便自己对语言本身进一步了解。于是乎,买了下来看了看,写的挺通俗易懂,但是不便的是,采用的语言是Java,PHP才是最好的语言么!为什么要采用Java。

这几日,我也在网上搜索了一些资料,发现这个不错。https://github.com/rspivak/ls…,不过同样,该教程采用的也不是PHP。正如作者所言,选什么语言由你,解释器并不依赖语言特性。

于是乎,我用PHP重写了part1的部分,并在以后几日,将会采用PHP重写所有部分。

在这里写出代码方便自己查找,同时也希望一些对解释器感兴趣的朋友一同学习。

<?phpclass Token{    private $type;    private $value;    public function __construct($type,$value)    {        $this->type=$type;        $this->value=$value;    }        public function __get($name)    {        return $this->{$name};    }        public function __toString()    {        return 'type:'.$this->type.' value:'.$this->value;    }}class Interpreter{    private $current_char ;    private $current_token ;    private $text;    private $pos=0;    public function __construct($text){        $this->text=trim($text);    }        public function error()    {        throw('Error parsing input');    }        public function get_next_token()    {        $text=$this->text;        if ($this->pos > strlen($text)-1){            return new Token('EOF', null);        }                $this->current_char = $text[$this->pos];        if (is_numeric($this->current_char)){            $token=new Token('INTEGER',intval($this->current_char));            $this->pos++;            return $token;        }        <i style="color:transparent">@本文来源gaodai$ma#com搞$代*码6网</i><b>搞代gaodaima码</b>        if ($this->current_char=="+"){            $token = new Token('PLUS', $this->current_char);            $this->pos ++;            return $token;        }        $this->error();    }        public function eat($token_type)    {        if ($this->current_token->type==$token_type){            $this->current_token=$this->get_next_token();        }else{            $this->error();        }    }            public function expr()    {        $this->current_token=$this->get_next_token();        $left=$this->current_token;        $this->eat('INTEGER');        $op=$this->current_token;        $this->eat('PLUS');        $right=$this->current_token;        $this->eat('INTEGER');        $result=$left->value+$right->value;        return $result;    }}do{    fwrite(STDOUT,'xav>');;    $input=fgets(STDIN);    $Interpreter=new Interpreter($input);    echo $Interpreter->expr();    unset($Interpreter);    }while(true);

目前仅支持个位整数相加

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请随时关注我们网站!

相关推荐:

thinkphp3.2.3怎样使用think-phpunit来进行单元测试的介绍

以上就是如何使用PHP来写一个简单的解释器的详细内容,更多请关注搞代码gaodaima其它相关文章!


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

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

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

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

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