一个Java编写的小玩意儿--脚本语言解释器(一)
今天开始想写一个脚本语言编译器。在这个领域,我还是知道的太少了,写的这个过程肯定是艰辛的,因为之前从来没有接触过这类的东西。写在自己的博客里,算是记录自己的学习历程吧。相信将来自己有幸再回过头来看到自己写的这个东西,一定会感觉当时的自己很有意思吧。哈哈。
首先要做的事情是先明白一些基础性的知识。分清楚几个概念。搞明白自己要做的是什么。
1、程序设计语言(Java,C,C++等)这些在设计程序时用的语言就是程序设计语言。程序写完了,就需要有相应额软件来执行。这种软件就是语言处理器。
2.语言处理器是什么?
语言处理器可以分为解释器和编译器。
解释器:解释器根据程序中的算法执行运算。他就是一种用来执行程序的软件。程序输入的同时会立即执行。执行速度较慢。
虚拟机:解释器如果执行的程序由虚拟机器语言或者类似于机器语言的语言写成,那这种软件也叫虚拟机。
编译器:编译器能将一种语言写的程序转换成另外一语言写的程序。一般就是把源程序转换成机器语言程序。(C语言用的就是编译器,直接把C程序编译成机器语言程序。C语言也提供了解释器,但是很少用,编译后的机器语言会暂时存在磁盘的某个文件中,然后借助操作系统【操作系统也是一个软件】读取机器语言的二进制文件再Copy到内存里,进而执行)
狭义的编译器会以文件的形式把编译后的程序存储在磁盘上。所以只要源程序不变,那编译就只需要一次就ok,执行时间也会缩短。(有些解释器内部的编译器不会保存转换后的程序文件)编译过程费时,执行过程较快。
编译:转换的这个动作就叫编译
源码转换器:如果编译器么有把源代码直接转换为机器语言,那这个软件就要源码转换器。
Java程序编译执行的整个流程。
第一步:Java源代码通过编译器被编译成Java二进制代码(字节码)
第二步:Java二进制代码一部分通过Java虚拟机的解释器执行,另一部分通过动态编译(JIT编译)来编译成二进制的机器语言代码。
有了一定的基础,现在就是要开始逐步设计语言了。在具体实现之前,先设计语言的基本语法。如果想要从零开始设计一种新颖实用的语言,结果往往烂尾。所以,先设计设计一下语言的简单语法,实现相应的语言处理器,一点点的完成。
功能1:四则运算
功能2:处理字符串
功能3:支持变量
功能4:一些简单的基本控制语句
一个Java编写的小玩意儿--脚本语言解释器(一)的更多相关文章
- 一个Java编写的小玩意儿---多人在线聊天工具
这个在线聊天工具小项目使用JAVA编写,用JAVA来做图形界面本来就是出了名的低效和丑陋.不过这不是重点.写这个小项目的目的在于串一串J2SE的知识,把当时写这个项目的时候的思路梳理一下.时间有点久了 ...
- Java学习笔记二十九:一个Java面向对象的小练习
一个Java面向对象的小练习 一:项目需求与解决思路: 学习了这么长时间的面向对象,我们只是对面向对象有了一个简单的认识,我们现在来做一个小练习,这个例子可以使大家更好的掌握面向对象的特性: 1.人类 ...
- Shell简介:1分钟理解什么是Shell 脚本语言 解释器 以及编译器和编译语言
Shell简介:1分钟理解什么是Shell 脚本语言 解释器 以及编译器和编译语言 现在我们使用的操作系统(Windows.Mac OS.Android.iOS 等)都是带图形界面的,简单直观,容易上 ...
- 小程序脚本语言WXS,你想要的都在这里了
WXS脚本语言是 Weixin Script脚本的简称,是JS.JSON.WXML.WXSS之后又一大小程序内部文件类型.截至到目前小程序已经提供了5种文件类型. 解构小程序的几种方式,其中一种方式就 ...
- 小程序脚本语言WXS详解
WXS脚本语言是 Weixin Script脚本的简称,是JS.JSON.WXML.WXSS之后又一大小程序内部文件类型.截至到目前小程序已经提供了5种文件类型. 解构小程序的几种方式,其中一种方式就 ...
- 利用java编写的盲注脚本
之前在网上见到一个盲注的题目,正好闲来无事,便用java写了个盲注脚本,并记录下过程中的坑 题目源码: <?php header("Content-Type: text/html;ch ...
- java编写jmeter压测脚本
目前项目中接触的比较多的是接口测试,功能测个差不多后会对部分接口进行压测,采用的是java编写脚本,导入jmeter进行压测. 使用到的jmeter的相关包 写一个测试类,继承AbstractJava ...
- java 计算数学表达式及执行脚本语言
java SE6中对常用的脚本语言做了支持. 可供使用者在java代码中执行脚本语言,还可以利用get("key"),put("key","value ...
- [改善Java代码]易变业务使用脚本语言编写
建议16: 易变业务使用脚本语言编写 Java世界一直在遭受着异种语言的入侵,比如PHP.Ruby.Groovy.JavaScript等,这些“入侵者”都有一个共同特征:全是同一类语言—脚本语言,它们 ...
随机推荐
- MYSQL学习拓展一:MySQL 存储过程之游标的使用!
一.MySQL游标的概念 游标介绍: MySQL的游标(cursor)是一个重要的概念,通过查找资料与自己的理解,主要得出以下几点关于自己的理解. 有数据缓冲的思想:游标的设计是一种数据缓冲区的思想, ...
- Redhat 安装perl模块
CPAN上下载要安装的模块 解压 gzip -d DBD-mysql-4.006.tar.gz tar xvf DBD-mysql-4.006.tar 然后进入DBD-mysql-4.006目录,执行 ...
- Tomcat的一些问题
首先设置好TOMCAT环境变量(如何设置?) 1.用Servlet发现每次改动Servlet都要重启Tomcat才能生效!!!搞死爹了!! 可以选择shutdown命令或者直接叉掉汤姆猫窗口!!!然后 ...
- 编译含有Servlet的java文件
直接在命令行方式下用javac HelloWorld.java编译HellowWorld Servlet是不行的,因为Java SE JDK不含Servlet类库. 解决方法:在环境变量CLASSPA ...
- function.py
#文档字符串 def square(x): 'calculates the square of the number x' return x*x square.__doc__ help(square) ...
- 安装并配置JAVA环境
详见百度经验 http://jingyan.baidu.com/article/0202781175839b1bcc9ce529.html
- 03_主线程联网问题&ANR&子线程不能修改UI
如果不使用HAXM,恐怕网页源码查看器无法获取servlet的源码.初步猜测是安卓模拟器运行速度太慢了.如果CPU不支持VT-x的话,HAXM是安装不上的.所以可以先开启VT-x. 可以参考几篇文章h ...
- Get与Post的小知识
Get与Post的小知识 一.传递参数: Get把参数包含在URL中,而在Post通过request body传递参数.因为参数直接暴露在URL上,GET比POST更不安全,所以不能用来传递敏感信息. ...
- 使用mysqlfrm恢复frm表结构,获得建表语句
1.mysqlfrm 是一个恢复性质的工具,用来读取.frm文件并从该文件中找到表定义数据生成CREATE语句. 下载链接:https://downloads.mysql.com/archives/u ...
- NYOJ1——A+B Problem NYOJ2——括号配对问题
A+B Problem 时间限制:3000 ms | 内存限制:65535 KB 难度:0 描述:此题为练手用题,请大家计算一下a+b的值 输入:输入两个数,a,b 输出:输出a+b的值 样 ...