一个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等,这些“入侵者”都有一个共同特征:全是同一类语言—脚本语言,它们 ...
随机推荐
- 一步一步学Silverlight 2系列(21):如何在Silverlight中调用JavaScript
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- 【转】Darwin Streaming Server 核心代码分析
无意中看到了dqzhangp的一篇博客,分析了DSS的核心架构,读完顿时感觉豁然开朗,茅塞顿开,写得非常的鞭辟入里,言简意赅,我想没有相当的功力是写不出这样的文章的,情不自禁转到自己空间来,生怕弄丢了 ...
- django上课笔记1-目录介绍-路由系统-ORM操作
一.Django目录介绍 django-admin startproject mysite # 创建名为mysite的项目 cd mysite # 切换到该目录下 python manage.py s ...
- HDU 5884 Sort (二分+k叉哈夫曼树)
题意:n 个有序序列的归并排序.每次可以选择不超过 k 个序列进行合并,合并代价为这些序列的长度和.总的合并代价不能超过T, 问 k最小是多少. 析:首先二分一下这个 k .然后在给定 k 的情况下, ...
- iOS Button选中与取消
/** * 是否点击 */ @property (nonatomic ,assign) BOOL selected; /** * button 点击事件选中取消选中 */ - (void)handl ...
- hdoj5387【模拟】
题意: 略: 思路: 把所有的角度按照分母的形式写,中间不要约,不要除...(然后我就wa了),本来是想保证结果的正确性,最后会造成约好以后分子很大..>360°: /* 这个案例不错,妈的,随 ...
- 关于 <meta name="viewport" content="width=device-width, initial-scale=1.0">的解释
对于移动开发来讲,我还不太熟悉.今天在github上荡了一个系统源码,进行分析.发现其中有这样一段话: <meta name="viewport" content=" ...
- python matplotlib相关 dateutil
dateutil: easy_install python_dateutil pyparsing: easy_install pyparsing
- poj 1733 Parity game【hash+带权并查集】
hash一下然后用带权并查集做模2下的前缀和 #include<iostream> #include<cstdio> #include<map> #include& ...
- PAT团体程序设计天梯赛 - 模拟赛
由于本人愚笨,最后一题实在无力AC,于是只有前14题的题解Orz 总的来说,这次模拟赛的题目不算难,前14题基本上一眼就有思路,但是某些题写起来确实不太容易,编码复杂度有点高~ L1-1 N个数求和 ...