国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

用PHP寫一個最簡單的解釋器Part1

molyzzx / 2739人閱讀

摘要:偶然間在朋友圈發現有人在看一本兩周自制腳本語言,覺得寫個腳本語言挺不錯的,方便自己對語言本身進一步了解。,不過同樣,該教程采用的也不是。在這里寫出代碼方便自己查找,同時也希望一些對解釋器感興趣的朋友一同學習。

偶然間在朋友圈發現有人在看一本《兩周自制腳本語言》,覺得寫個腳本語言挺不錯的,方便自己對語言本身進一步了解。于是乎,買了下來看了看,寫的挺通俗易懂,但是不便的是,采用的語言是Java,PHP才是最好的語言么!為什么要采用Java。

這幾日,我也在網上搜索了一些資料,發現這個不錯。https://github.com/rspivak/ls...,不過同樣,該教程采用的也不是PHP。正如作者所言,選什么語言由你,解釋器并不依賴語言特性。

于是乎,我用PHP重寫了part1的部分,并在以后幾日,將會采用PHP重寫所有部分。

在這里寫出代碼方便自己查找,同時也希望一些對解釋器感興趣的朋友一同學習。

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 new Exception("Lexer eroor");
    }
    
    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;
        }
        
        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);


目前僅支持個位整數相加

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/29004.html

相關文章

  • Part1JS一個Blog(node + vue + mongoDB)

    摘要:總的來說就是開發博客系統,探索前端走向全棧之路。我會記錄下來整個過程在我的專欄,有興趣的可以關注一下,一起學習,歡迎討論。話不多說,先進行前后端項目的初始化。安裝完成后,輸入命令切換到項目文件夾后輸入命令訪問一下項目初始化完成。 學習JS也有一段時間了,準備試著寫一個博客項目,前后端分離開發,后端用node只提供數據接口,前端用vue-cli腳手架搭建,路由也由前端控制,數據異步交互用...

    jhhfft 評論0 收藏0
  • Part1JS一個Blog(node + vue + mongoDB)

    摘要:總的來說就是開發博客系統,探索前端走向全棧之路。我會記錄下來整個過程在我的專欄,有興趣的可以關注一下,一起學習,歡迎討論。話不多說,先進行前后端項目的初始化。安裝完成后,輸入命令切換到項目文件夾后輸入命令訪問一下項目初始化完成。 學習JS也有一段時間了,準備試著寫一個博客項目,前后端分離開發,后端用node只提供數據接口,前端用vue-cli腳手架搭建,路由也由前端控制,數據異步交互用...

    ctriptech 評論0 收藏0
  • 測試你前端代碼 - part1(介紹篇)

    摘要:測試光譜光譜的一端單元測試顧名思義,代碼以單元為單位進行測試。這個系列文章整體如下測試你的前端代碼單元測試測試你的前端代碼端到端測試測試你的前端代碼集成測試。 showImg(https://segmentfault.com/img/remote/1460000008812278?w=998&h=354); 本文作者:Gil Tayar 編譯:胡子大哈 翻譯原文:http://hu...

    helloworldcoding 評論0 收藏0
  • 測試你前端代碼 - part1(介紹篇)

    摘要:測試光譜光譜的一端單元測試顧名思義,代碼以單元為單位進行測試。這個系列文章整體如下測試你的前端代碼單元測試測試你的前端代碼端到端測試測試你的前端代碼集成測試。 showImg(https://segmentfault.com/img/remote/1460000008812278?w=998&h=354); 本文作者:Gil Tayar 編譯:胡子大哈 翻譯原文:http://hu...

    jimhs 評論0 收藏0
  • 前端跳槽面試算法——動態規劃

    摘要:我記得大三參加騰訊的校招面試時只準備了幾種常見的排序算法就足以應對了,然而今年包括今日頭條在內的多家大廠的前端筆試題目中都出現了貪心算法動態規劃分治算法等進階性的算法題目。本篇博客參考今日頭條銀國徽老師的《js版數據結構與算法》Part1改編自《漫畫算法》原作者:程序員小灰前言眾所周知,與后臺開發人員相比,算法是我們前端開發人員的一個弱項。而近兩年隨著互聯網行業競爭愈發激烈,市場上對前端崗位...

    mushang 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<