用PHP写一个最简单的解释器Part1
偶然间在朋友圈发现有人在看一本《两周自制脚本语言》,觉得写个脚本语言挺不错的,方便自己对语言本身进一步了解。于是乎,买了下来看了看,写的挺通俗易懂,但是不便的是,采用的语言是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 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);
目前仅支持个位整数相加
用PHP写一个最简单的解释器Part1相关推荐
- php 课程节次周次提取,用PHP写一个最简单的解释器Part5(计算器最后一节,下节开始如何写个脚本语言)...
经过几天的努力,用PHP已经实现了一个完整的基础计算器,如下图 上代码 define('ISINTEGER','ISINTEGER');//定义整数类型描述 define('PLUS','PLUS') ...
- Java入门知识,写一个最简单java程序
本文目录 一.Java语言的简介 二.写一个最简单Java程序 1.Notepad配置 2.最简单的Java程序 3.代码分析 4.编译与编译常见错误 5.执行java程序 一.Java语言的简介 0 ...
- 用JAVA写一个最简单的飞翔的小鸟
如果你想写一个最简单的飞翔的小鸟的 Java 程序,可以先了解 Java 的图形绘制功能.Java 提供了一个叫做 Graphics 的图形绘制类,可以用来绘制图形.填充颜色.画线等. 你可以通过创建 ...
- 利用taichi写一个最简单的SPH(光滑粒子动力学)
简介 参考doyub Kim那本<Fluid Engine Development>写一个最简单的弱可压SPH. 目前有BUG, 粒子太散了 效果展示 CSDN有图片大小限制,大概就这样 ...
- python写一个很简单的Atm机系统,使用pickle模块和json模块来保存数据
我做的是一个很简单的Atm系统,很多都没约束条件 目的: 用面向对象思维来处理 运用文件的读写 文件的读写用pickle模块和json模块来处理 pickle模块: pickle模块处理数据功能很强大 ...
- Unity自学第一天, 新手小白进!写一个最简单的脚本让方块旋转起来
Unity自学入坑第一天 今天开始自学unity,如何让场景中的基本方块开始旋转起来,一个非常简单的小sample,作为入门,本人纯纯新手小白,之后会继续更新所有自学记录 在场景中添加一个方块,左边空 ...
- 如何用初级的JavaWeb知识写一个较简单的网站(一)
本人JavaWeb初学者,这是学校一门课程的期末作业,之前已经写了不少了,但是由于一点误操作,导致项目有点崩盘,加上心态不是很好,所以把整个项目全部删除重做,这里记录一下我写整个项目的全过程. 环境是 ...
- 自己写一个最简单的bootloader_jz2440
写在前面: 我的博客已迁移至自建服务器:博客传送门,CSDN博客暂时停止,如有机器学习方面的兴趣,欢迎来看一看. 此外目前我在gitHub上准备一些李航的<统计学习方法>的实现算法,目标将 ...
- 安装汇编环境,写一个最简单的窗口程序
用汇编写一个窗口程序 1.安装汇编所需的环境 1.下载masm32 下载地址 可以安装到D:\masm32目录下 2.配置环境变量 include = D:\masm32\include lib = ...
最新文章
- Ajax 中XmlHttp 乱码 的解决方法 (UTF8,GB2312 编码 解码)
- pycharm 链接wsl和 wsl 配置cuda nvidia
- canvas之三:绘制弧和圆
- system函数和fork-exec机制
- 动态规划 - 买卖股票的最佳时机 IV
- EntityFramework Code-First—领域类配置之DataAnnotations
- 将 url query参数 字符串转换为JSON 对象
- Unidac连接出错:命名管道提供程序:管道的另一端上无任何进程.
- 关于IDEA中有关springboot快启动报错问题
- 游戏王怪兽胶囊Android,游戏王怪兽胶囊GB是什么?
- 小程序UI组件库合集——Vant、iView、ColorUI
- pacman基本命令
- MapXtreme+Asp.net 动态轨迹(请求大神指点)
- mysql 手工配置_小姜学网络(MySQL数据库的手工安装与配置)附代码
- 手指 (shou zhi)
- H3C新华三链路聚合介绍
- excel文件导出、下载的响应类型设置
- 寻找你的热情(1)——检查自己所处的位置
- 字符串插入字符串函数
- 【转载】华为荣耀V9手机如何设置WiFi热点共享