亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

用PHP寫(xiě)一個(gè)最簡(jiǎn)單的解釋器Part1

molyzzx / 2790人閱讀

摘要:偶然間在朋友圈發(fā)現(xiàn)有人在看一本兩周自制腳本語(yǔ)言,覺(jué)得寫(xiě)個(gè)腳本語(yǔ)言挺不錯(cuò)的,方便自己對(duì)語(yǔ)言本身進(jìn)一步了解。,不過(guò)同樣,該教程采用的也不是。在這里寫(xiě)出代碼方便自己查找,同時(shí)也希望一些對(duì)解釋器感興趣的朋友一同學(xué)習(xí)。

偶然間在朋友圈發(fā)現(xiàn)有人在看一本《兩周自制腳本語(yǔ)言》,覺(jué)得寫(xiě)個(gè)腳本語(yǔ)言挺不錯(cuò)的,方便自己對(duì)語(yǔ)言本身進(jìn)一步了解。于是乎,買(mǎi)了下來(lái)看了看,寫(xiě)的挺通俗易懂,但是不便的是,采用的語(yǔ)言是Java,PHP才是最好的語(yǔ)言么!為什么要采用Java。

這幾日,我也在網(wǎng)上搜索了一些資料,發(fā)現(xiàn)這個(gè)不錯(cuò)。https://github.com/rspivak/ls...,不過(guò)同樣,該教程采用的也不是PHP。正如作者所言,選什么語(yǔ)言由你,解釋器并不依賴(lài)語(yǔ)言特性。

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

在這里寫(xiě)出代碼方便自己查找,同時(shí)也希望一些對(duì)解釋器感興趣的朋友一同學(xué)習(xí)。

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);


目前僅支持個(gè)位整數(shù)相加

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/29004.html

相關(guān)文章

  • Part1JS寫(xiě)一個(gè)Blog(node + vue + mongoDB)

    摘要:總的來(lái)說(shuō)就是開(kāi)發(fā)博客系統(tǒng),探索前端走向全棧之路。我會(huì)記錄下來(lái)整個(gè)過(guò)程在我的專(zhuān)欄,有興趣的可以關(guān)注一下,一起學(xué)習(xí),歡迎討論。話不多說(shuō),先進(jìn)行前后端項(xiàng)目的初始化。安裝完成后,輸入命令切換到項(xiàng)目文件夾后輸入命令訪問(wèn)一下項(xiàng)目初始化完成。 學(xué)習(xí)JS也有一段時(shí)間了,準(zhǔn)備試著寫(xiě)一個(gè)博客項(xiàng)目,前后端分離開(kāi)發(fā),后端用node只提供數(shù)據(jù)接口,前端用vue-cli腳手架搭建,路由也由前端控制,數(shù)據(jù)異步交互用...

    jhhfft 評(píng)論0 收藏0
  • Part1JS寫(xiě)一個(gè)Blog(node + vue + mongoDB)

    摘要:總的來(lái)說(shuō)就是開(kāi)發(fā)博客系統(tǒng),探索前端走向全棧之路。我會(huì)記錄下來(lái)整個(gè)過(guò)程在我的專(zhuān)欄,有興趣的可以關(guān)注一下,一起學(xué)習(xí),歡迎討論。話不多說(shuō),先進(jìn)行前后端項(xiàng)目的初始化。安裝完成后,輸入命令切換到項(xiàng)目文件夾后輸入命令訪問(wèn)一下項(xiàng)目初始化完成。 學(xué)習(xí)JS也有一段時(shí)間了,準(zhǔn)備試著寫(xiě)一個(gè)博客項(xiàng)目,前后端分離開(kāi)發(fā),后端用node只提供數(shù)據(jù)接口,前端用vue-cli腳手架搭建,路由也由前端控制,數(shù)據(jù)異步交互用...

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

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

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

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

    jimhs 評(píng)論0 收藏0
  • 前端跳槽面試算法——?jiǎng)討B(tài)規(guī)劃

    摘要:我記得大三參加騰訊的校招面試時(shí)只準(zhǔn)備了幾種常見(jiàn)的排序算法就足以應(yīng)對(duì)了,然而今年包括今日頭條在內(nèi)的多家大廠的前端筆試題目中都出現(xiàn)了貪心算法動(dòng)態(tài)規(guī)劃分治算法等進(jìn)階性的算法題目。本篇博客參考今日頭條銀國(guó)徽老師的《js版數(shù)據(jù)結(jié)構(gòu)與算法》Part1改編自《漫畫(huà)算法》原作者:程序員小灰前言眾所周知,與后臺(tái)開(kāi)發(fā)人員相比,算法是我們前端開(kāi)發(fā)人員的一個(gè)弱項(xiàng)。而近兩年隨著互聯(lián)網(wǎng)行業(yè)競(jìng)爭(zhēng)愈發(fā)激烈,市場(chǎng)上對(duì)前端崗位...

    mushang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<