偶然间在朋友圈发现有人在看一本《两周自制脚本语言》,觉得写个脚本语言挺不错的,方便自己对语言本身进一步了解。于是乎,买了下来看了看,写的挺通俗易懂,但是不便的是,采用的语言是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相关推荐

  1. php 课程节次周次提取,用PHP写一个最简单的解释器Part5(计算器最后一节,下节开始如何写个脚本语言)...

    经过几天的努力,用PHP已经实现了一个完整的基础计算器,如下图 上代码 define('ISINTEGER','ISINTEGER');//定义整数类型描述 define('PLUS','PLUS') ...

  2. Java入门知识,写一个最简单java程序

    本文目录 一.Java语言的简介 二.写一个最简单Java程序 1.Notepad配置 2.最简单的Java程序 3.代码分析 4.编译与编译常见错误 5.执行java程序 一.Java语言的简介 0 ...

  3. 用JAVA写一个最简单的飞翔的小鸟

    如果你想写一个最简单的飞翔的小鸟的 Java 程序,可以先了解 Java 的图形绘制功能.Java 提供了一个叫做 Graphics 的图形绘制类,可以用来绘制图形.填充颜色.画线等. 你可以通过创建 ...

  4. 利用taichi写一个最简单的SPH(光滑粒子动力学)

    简介 参考doyub Kim那本<Fluid Engine Development>写一个最简单的弱可压SPH. 目前有BUG, 粒子太散了 效果展示 CSDN有图片大小限制,大概就这样 ...

  5. python写一个很简单的Atm机系统,使用pickle模块和json模块来保存数据

    我做的是一个很简单的Atm系统,很多都没约束条件 目的: 用面向对象思维来处理 运用文件的读写 文件的读写用pickle模块和json模块来处理 pickle模块: pickle模块处理数据功能很强大 ...

  6. Unity自学第一天, 新手小白进!写一个最简单的脚本让方块旋转起来

    Unity自学入坑第一天 今天开始自学unity,如何让场景中的基本方块开始旋转起来,一个非常简单的小sample,作为入门,本人纯纯新手小白,之后会继续更新所有自学记录 在场景中添加一个方块,左边空 ...

  7. 如何用初级的JavaWeb知识写一个较简单的网站(一)

    本人JavaWeb初学者,这是学校一门课程的期末作业,之前已经写了不少了,但是由于一点误操作,导致项目有点崩盘,加上心态不是很好,所以把整个项目全部删除重做,这里记录一下我写整个项目的全过程. 环境是 ...

  8. 自己写一个最简单的bootloader_jz2440

    写在前面: 我的博客已迁移至自建服务器:博客传送门,CSDN博客暂时停止,如有机器学习方面的兴趣,欢迎来看一看. 此外目前我在gitHub上准备一些李航的<统计学习方法>的实现算法,目标将 ...

  9. 安装汇编环境,写一个最简单的窗口程序

    用汇编写一个窗口程序 1.安装汇编所需的环境 1.下载masm32 下载地址 可以安装到D:\masm32目录下 2.配置环境变量 include = D:\masm32\include lib = ...

最新文章

  1. Ajax 中XmlHttp 乱码 的解决方法 (UTF8,GB2312 编码 解码)
  2. pycharm 链接wsl和 wsl 配置cuda nvidia
  3. canvas之三:绘制弧和圆
  4. system函数和fork-exec机制
  5. 动态规划 - 买卖股票的最佳时机 IV
  6. EntityFramework Code-First—领域类配置之DataAnnotations
  7. 将 url query参数 字符串转换为JSON 对象
  8. Unidac连接出错:命名管道提供程序:管道的另一端上无任何进程.
  9. 关于IDEA中有关springboot快启动报错问题
  10. 游戏王怪兽胶囊Android,游戏王怪兽胶囊GB是什么?
  11. 小程序UI组件库合集——Vant、iView、ColorUI
  12. pacman基本命令
  13. MapXtreme+Asp.net 动态轨迹(请求大神指点)
  14. mysql 手工配置_小姜学网络(MySQL数据库的手工安装与配置)附代码
  15. 手指 (shou zhi)
  16. H3C新华三链路聚合介绍
  17. excel文件导出、下载的响应类型设置
  18. 寻找你的热情(1)——检查自己所处的位置
  19. 字符串插入字符串函数
  20. 【转载】华为荣耀V9手机如何设置WiFi热点共享

热门文章

  1. 使用sftp不用输入密码
  2. java消费kafka数据之后,进行堆积之后在插入数据库
  3. JS编写一个函数,实现传入一个不定长度字符串,查找出重复次数前n名的字符并分别统计其次数
  4. 对java面向对象的三大特征的理解_Java面向对象的三大特征是什么?
  5. String类型的认识以及编译器优化
  6. 用开源NAC阻止非法网络访问
  7. 如何买到好的固态硬盘?这样做才能不被骗
  8. 同步和异步, 阻塞和非阻塞, Reactor和Proactor
  9. MarshalByRefObject浅析
  10. RHEL 6.6安装桌面环境GNOME