用PHP寫乙個最簡單的直譯器Part2

2021-09-13 13:02:24 字數 1316 閱讀 9894

之前寫過乙個計算器,採用js實現的,不過當時沒有想到的好的辦法,最終採用了js的eval函式來實現字串的解析和運算。

這並不是的好的方法,如果實現的計算器比較複雜,最終會發現程式十分臃腫.

接下來部分,在重構 的同時,並實現乙個完整計算器的直譯器

part2**實現功能

<?php 

define('isinteger','isinteger');//定義整數型別描述

define('plus','plus');//定義操作符號型別描述 加法

define('minus','minus');//定義操作符號型別描述 減法

define('whitespace',' ');//定義空格

/**token 用來儲存輸入字元的型別

*/class token

/**通過該方法來獲取類的私有屬性

*/public function __get($name);}

/**用於除錯

*/public function __tostring()

}//直譯器

class interpreter

public function error()

/*步進方法,每操作乙個字元後前進一位

*/public function advance()

else}/*

去除空格

*/public function skip_whitespace()}/*

如果要支援多位的整數,則需要將每位數字儲存起來

*/public function integers()

return intval($result);//將數字字串轉成整數

}//獲取當前字元的token

public function get_next_token()

if (is_numeric($this->current_char))

if ($this->current_char=="+")

if ($this->current_char=="-")

return new token('eof', null);}}

//如果字元型別和判斷的型別一致,則繼續,否則輸入錯誤

public function eat($token_type)

else

}//解釋方法

用PHP寫乙個最簡單的直譯器Part3

總想成為一名寫作技巧高超的作家,卻一不小心成為了碼農。不知道,大家有沒有看原文作者的一些看法 傳送門 我們為什麼要學習新的知識,我們應該如何學習新的知識。看過很多書,卻沒有記住多少,有時候覺得自己就像魚一樣,真的只有七秒的記憶。正如原作者所說的,學習知識最好的方法就是去實踐。這樣才可以將知識掌握。之...

用最簡單快捷的方法用js寫乙個計算器

在js的全域性方法中有乙個eval 方法,由於平時不怎麼用,所以到關鍵時候就沒想起來它 想寫乙個簡易的計算器,本來以為要不了多久就能寫出來的,誰知道愣是花費了我近兩個小時的時間來寫,但結果還是不能令我滿意。想找乙個更好的方法來寫,不想寫的那麼麻煩,用什麼方法呢?想了乙個遍,後來猛然看到螢幕上有乙個e...

用rust寫乙個玩具直譯器0

假期閒來無事,看了thorsten ball的writing an interpreter in go,他還有一本寫編譯器的暫時沒看,跟著書上的 寫了一遍,想著用rust重寫一遍,現在正在寫eval部分.writing an interpreter in go 我對go的感覺如它宣傳的一般,21世紀...