今天开始想写一个脚本语言编译器。在这个领域,我还是知道的太少了,写的这个过程肯定是艰辛的,因为之前从来没有接触过这类的东西。写在自己的博客里,算是记录自己的学习历程吧。相信将来自己有幸再回过头来看到自己写的这个东西,一定会感觉当时的自己很有意思吧。哈哈。
首先要做的事情是先明白一些基础性的知识。分清楚几个概念。搞明白自己要做的是什么。
1、程序设计语言(Java,C,C++等)这些在设计程序时用的语言就是程序设计语言。程序写完了,就需要有相应额软件来执行。这种软件就是语言处理器。
2.语言处理器是什么?
语言处理器可以分为解释器和编译器。

解释器:解释器根据程序中的算法执行运算。他就是一种用来执行程序的软件。程序输入的同时会立即执行。执行速度较慢。

虚拟机:解释器如果执行的程序由虚拟机器语言或者类似于机器语言的语言写成,那这种软件也叫虚拟机。

编译器:编译器能将一种语言写的程序转换成另外一语言写的程序。一般就是把源程序转换成机器语言程序。(C语言用的就是编译器,直接把C程序编译成机器语言程序。C语言也提供了解释器,但是很少用,编译后的机器语言会暂时存在磁盘的某个文件中,然后借助操作系统【操作系统也是一个软件】读取机器语言的二进制文件再Copy到内存里,进而执行)
狭义的编译器会以文件的形式把编译后的程序存储在磁盘上。所以只要源程序不变,那编译就只需要一次就ok,执行时间也会缩短。(有些解释器内部的编译器不会保存转换后的程序文件)编译过程费时,执行过程较快。

编译:转换的这个动作就叫编译

源码转换器:如果编译器么有把源代码直接转换为机器语言,那这个软件就要源码转换器。

Java程序编译执行的整个流程。

第一步:Java源代码通过编译器被编译成Java二进制代码(字节码)

第二步:Java二进制代码一部分通过Java虚拟机的解释器执行,另一部分通过动态编译(JIT编译)来编译成二进制的机器语言代码。

有了一定的基础,现在就是要开始逐步设计语言了。在具体实现之前,先设计语言的基本语法。如果想要从零开始设计一种新颖实用的语言,结果往往烂尾。所以,先设计设计一下语言的简单语法,实现相应的语言处理器,一点点的完成。

功能1:四则运算
功能2:处理字符串
功能3:支持变量
功能4:一些简单的基本控制语句

一个Java编写的小玩意儿--脚本语言解释器(一)的更多相关文章

  1. 一个Java编写的小玩意儿---多人在线聊天工具

    这个在线聊天工具小项目使用JAVA编写,用JAVA来做图形界面本来就是出了名的低效和丑陋.不过这不是重点.写这个小项目的目的在于串一串J2SE的知识,把当时写这个项目的时候的思路梳理一下.时间有点久了 ...

  2. Java学习笔记二十九:一个Java面向对象的小练习

    一个Java面向对象的小练习 一:项目需求与解决思路: 学习了这么长时间的面向对象,我们只是对面向对象有了一个简单的认识,我们现在来做一个小练习,这个例子可以使大家更好的掌握面向对象的特性: 1.人类 ...

  3. Shell简介:1分钟理解什么是Shell 脚本语言 解释器 以及编译器和编译语言

    Shell简介:1分钟理解什么是Shell 脚本语言 解释器 以及编译器和编译语言 现在我们使用的操作系统(Windows.Mac OS.Android.iOS 等)都是带图形界面的,简单直观,容易上 ...

  4. 小程序脚本语言WXS,你想要的都在这里了

    WXS脚本语言是 Weixin Script脚本的简称,是JS.JSON.WXML.WXSS之后又一大小程序内部文件类型.截至到目前小程序已经提供了5种文件类型. 解构小程序的几种方式,其中一种方式就 ...

  5. 小程序脚本语言WXS详解

    WXS脚本语言是 Weixin Script脚本的简称,是JS.JSON.WXML.WXSS之后又一大小程序内部文件类型.截至到目前小程序已经提供了5种文件类型. 解构小程序的几种方式,其中一种方式就 ...

  6. 利用java编写的盲注脚本

    之前在网上见到一个盲注的题目,正好闲来无事,便用java写了个盲注脚本,并记录下过程中的坑 题目源码: <?php header("Content-Type: text/html;ch ...

  7. java编写jmeter压测脚本

    目前项目中接触的比较多的是接口测试,功能测个差不多后会对部分接口进行压测,采用的是java编写脚本,导入jmeter进行压测. 使用到的jmeter的相关包 写一个测试类,继承AbstractJava ...

  8. java 计算数学表达式及执行脚本语言

    java SE6中对常用的脚本语言做了支持. 可供使用者在java代码中执行脚本语言,还可以利用get("key"),put("key","value ...

  9. [改善Java代码]易变业务使用脚本语言编写

    建议16: 易变业务使用脚本语言编写 Java世界一直在遭受着异种语言的入侵,比如PHP.Ruby.Groovy.JavaScript等,这些“入侵者”都有一个共同特征:全是同一类语言—脚本语言,它们 ...

随机推荐

  1. android项目 res/ 目录内支持的资源目录详解

    表 1. 项目 res/ 目录内支持的资源目录 目录 资源类型 animator/ 用于定义属性动画的 XML 文件. anim/ 定义渐变动画的 XML 文件.(属性动画也可以保存在此目录中,但是为 ...

  2. g00 网站说明

    最近在做dns tunnel检测,发现了一堆类似这样的域名:c-6rtwjumjzx7877x24uwjkjwjshjx78x2eywzx78yjx2ehtr.g00.medicinenet.com ...

  3. robotframework:appium切换webview后,在webview里滑动屏幕

    问题: 在用robot写手机淘宝app的自动化时,打开手机淘宝后,点击天猫国际,跳转到天猫国际页面,天猫国际页面是H5, 需要切换到对应的webview,切换到webview后,点击美妆菜单,跳转到美 ...

  4. 架构:MVC

    ylbtech-架构:MVC MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数 ...

  5. 分区时"磁盘上没有足够的空间完成此操作"的解决方法

    在新的预装windows 7的品牌机上,工作人员一般将磁盘分为C.D两个分区.但往往造成C盘有很大一部分的空间没办法分出来,而分出来的部分空间又不能和后面的磁盘合并,甚至出现无法新建简单卷的操作,即点 ...

  6. django上课笔记3-ORM补充-CSRF (跨站请求伪造)

    一.ORM补充 ORM操作三大难点: 正向操作反向操作连表 其它基本操作(包含F Q extra) 性能相关的操作 class UserInfo(models.Model): uid = models ...

  7. ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 05.Controller 的路由

    视频地址: https://www.bilibili.com/video/av38392956/?p=5 这里面就包含了MVC相关的库 可以通过打开右侧的Nuget库进行查看 这里修改下 ,只需要静态 ...

  8. 黑马传智JavaEE57期 2019最新基础+就业+在职加薪_汇总

    黑马传智JavaEE57期 2019最新基础+就业+在职加薪 阶段1 语言基础+高级· 1-1-Java基础语法 第14节 数组 111

  9. 洛谷 - P1355 - 神秘大三角 - 简单计算几何

    https://www.luogu.org/problemnew/show/P1355 判断一个点和三角形的位置关系,最简单的思路就是用向量. 首先排除掉和三角形顶点重合的情况. 把三角形设计成一个首 ...

  10. IEnumerable<T> 的时候一个主意事项p

    IEnumerator IEnumerable.GetEnumerator() { return _vtDataView.GetEnumerator(); } public IEnumerator&l ...