高分求助:Java自定义脚本语言解释器的设计实现思路

作者&投稿:一厕 (若有异议请与网页底部的电邮联系)
如何有步骤地实现一个解释器~

怎样写一个解释器
解释器是比较深入的内容.虽然我试图从最基本的原理讲起,尽量让这篇文章不依赖于其它的知识,但是这篇教程并不是针对函数式编程的入门,所以我假设你已经学会了最基本的 Scheme 和函数式编程.如果你完全不了解这些,可以读一下 SICP 的第一,二章.当然你也可以继续读这篇文章,有不懂的地方再去查资料.我在这里也会讲递归和模式匹配的原理.如果你已经了解这些东西,这里的内容也许可以加深你的理解.
解释器其实不是很难的东西,可是好多人都不会写,因为在他们心目中解释器就像一个 Python 解释器那样复杂.如果你想开头就写一个 Python 解释器,那你多半永远也写不出来.你必须从最简单的语言开始,逐步增加语言的复杂度,才能构造出正确的解释器.这篇文章就是告诉你如何写出一个最简单的语言 (lambda calculus) 的解释器,并且带有基本的的算术功能,可以作为一个高级计算器来使用.

1.
interface A
{void print();}
2.
重载就是一个类中有多个同名但有不同形参和方法体的方法
3.
某个非抽象类的父类是抽象类,则这个子类必须重载父类的所有抽象方法
4.
重复代码
5.
构造函数与类同名
6.
可以让方法返回数值
7.
方法没有返回值
8.
可以没有
9.
可能在方法内的局部可见

这个你有编译原理基础的话,就在找本编译原理的书看,会想起来怎么做的。这个解析过程并不太难。

如果你没学过编译原理,那就别看了,短时间内掌握不了的。可以参考这个思路:
建立一个替换表:
{”如果“ : "if", "并且" : "&&", "则" : "{", "如果结束" : "}"},可能还有很多别的什么的吧
然后对程序进行替换
替换后为:
C = A + B
if(C > 0 && A > 5){
D=100
if(C > 5 && B > 10){
D=200
}
}
然后进行一些语法补全的操作什么的,争取转换为javascript之类的脚本语言。这样就能执行了

对于变量那个判断,可以对于变量进行遍历,查找全部赋值操作左边的变量,就是被赋值变量了,其他的就是可变的

有种东西叫 JRuby (google之 )

估计这东西你研究懂了1/4,伱的问题就迎刃而解了~~

可以先看看计算表达式如何解析+计算实现。

好东西。


求助关于Java题目。 小题有点多就给100分吧。 感谢。。
先把题目翻译一下吧,大概是:1、找出最大值和最小值。2、相邻的数求和。3、找出相邻的重复的值。Scanner input = new Scanner(System.in);System.out.println("第一题");System.out.print("输入:");String s = input.nextLine();if (null != s && s.length() > 0) { String[] arr...

java新手程序求助~~!
public class UnSafePasswordException extends Exception { public UnSafePasswordException(String message){ super(message);} } \/\/以上自定义异常类对象。public class TestInputPassword { public static void main(String[] args) throws UnSafePasswordException { System.out.println("请输入6位以上的...

java类型转换的一个简单问题,求助!
String 表示一个不可变的字符序列。比如“11”StringBuilder 是一个可变的线程不安全的字符序列.有以下几个重载的方法 public StringBuilder append(int i);public StringBuilder append(String str);。。。22是一个整数 + 号是一个重载的运算符,在编译时会被优化。“11”+ 22会被编译器优化成这样 ...

Java作业求助
public class Student { private String name;private long num;private int age;private String phone;private int classid;\/\/构造方法1 public Student(String name,long num){ this.name=name;this.num=num;} \/\/构造方法2 public Student(String name,long num,int age){ this.name=name;this....

学弟求助,Java基础编程好过么= =
修饰符 class 类名{程序代码}123 Java中的程序代码可以分为结构定义语句和功能执行语句,其中,结构定义语句用于声明一个类或方法,功能执行语句用于实现具体的功能。每条功能执行语句的最后都必须用分号(;)结束。Java语言是严格区分大小写的。编写Java代码时,可以在两个单词或符号之间任意的换行。但为了...

求助[编写java程序]
首先先考虑需要设计哪几个类。顾客这个类是必须的,还有计算银行的帐户还有多少钱的类。最好,考虑的清楚一些,将不同的事件都分成类,因为java都是 由类组成的。刚初学的时候要多写多考虑哦,这样进步会很大的。public class bank extends Thread{ public bank(){ } public static void main(String ...

...学所以现在后悔了我想从事软件编程我正在自学java不知道怎么办迷失了...
这种事是很严肃的,本人从事这个行业快两年了,不知道的绝不乱说,相信不会对你产生误导 1.首先相你这种例子在身边遇到过,我们以前的项目经理就和你差不多,半道转行过来的,一开始对JAVA也是一点不懂,我这么说就是告诉你,你的这种想法是可行的,只要多努力,坚持下来就没问题,事在人为嘛 2.无...

JAVA的一道程序题,新手高分求助……(核心算法已经解决,求输入输出及...
比如:import java.io.*;class C { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new FileReader("base.in"));PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("base.out")), true);outmost:for (String line; (line...

求助一个java程序.
输入一个员工编号后从数据库中取得其所有下属及下下属等信息,以及判断其是否还有上级。这个应该不难吧。然后组合成以下Employee类,用getRealSalary方法得到该员工的工资。class Employee { private List<Employee> subEmployee = new ArrayList<Employee>();private double salary;private boolean hasBoss =...

java测试题求助
1.Java是不区分大小写的语言。(错)2.Java的源代码中定义几个类, 编译结果就生成几个以.class为后缀的字节码文件。(对)3.Java的字符类型采用的是ASCII编码。(错) ---unicode 4.在进行类的继承时,子类可以拥有与父类相同名字的属性和方法。(错)---私有的就不行 5.类中不可以没有构造函...

连云区18468011806: 高分求助:Java自定义脚本语言解释器的设计实现思路 -
务鸦复方: 这个你有编译原理基础的话,就在找本编译原理的书看,会想起来怎么做的.这个解析过程并不太难.如果你没学过编译原理,那就别看了,短时间内掌握不了的.可以参考这个思路: 建立一个替换表: {”如果“ : "if", "并且" : "&&...

连云区18468011806: 如何在Java中使用Lua脚本语言 -
务鸦复方: 对于jvm这个平台,上面实现了很多脚本语言,比如python在java上的实现叫做jython,ruby的叫做jruby,lua也有在java上的实现,你可以搜索一下,luajava就是一个.其实在net平台上也有很多脚本语言的实现的,比如iron(python)之类的.

连云区18468011806: 用java编写并生成一个sql小脚本语句 -
务鸦复方: //替换文本 public static void test28() throws Exception{ FileReader fr = new FileReader("E:/qqqq.txt"); BufferedReader br = new BufferedReader(fr); String tmp; while((tmp=br.readLine())!=null){ String[] strs = tmp.split("\\s+"); //TODO 你要做的 for (String str : strs) { System.out.println(str); } } br.close(); fr.close(); }

连云区18468011806: 帮忙解释一下这个java脚本函数的意思 -
务鸦复方: document.getElementById 通过元素的ID来获得该网页元素,从而完成后续操作 openDialog 看上去应该是一个用户自定义的JS函数功能应该是弹出窗口 我理解就是这样了 希望对你有帮助

连云区18468011806: 如何用loadrunner编写java vuser脚本 -
务鸦复方: 打开loadrunner的Virtual User Generator新建New Vittual User脚本,选择java协议下的java vuser,点击create进入java vuser脚本编写页面在public class Actions里编写你的java脚...

连云区18468011806: 如何用 ANTLR 4 实现自己的脚本语言 -
务鸦复方: ANTLR 是一个 Java 实现的词法/语法分析生成程序,目前最新版本为 4.5.2,支持 Java,C#,JavaScript 等语言,这里我们用 ANTLR 4.5.2 来实现一个自己的脚本语言.因为某些未知原因,ANTLR 官方的文档似乎有些地方和 4.5.2 版的实际情况不太吻合,所以,有些部分,我们必须多方查找和自己实践得到,所幸 ANTLR 的文档比较丰富,其在 Github 上例子程序也很多,足够我们探索的了.如果你没有编译原理的基础,只要写过正则表达式,应该也能很快理解其规则,进而编写自己的规则文件,事实上,因为结构更清晰, ANTLR 的规则文件,比正则表达式要简单得多.

连云区18468011806: 如何写脚本语言? -
务鸦复方: 一般系统学过ASP的编程人员都会切身体会到:在系统学习ASP的内置对象和内置组件之前,学会脚本语言永远是至关重要的. <br> 为什么这么说呢?为什么要学脚本语言呢?ASP和脚本语言又有什么关系呢? <br> 首先说说ASP是贵为何物...

连云区18468011806: 求助:我的脚本C语言和JAVA语言的写法? -
务鸦复方: JAVApublic class java{ public static void main(String[] args){ for(int i=0;i<7;i++){ System.out.println((i+1)+","+(i+1)); } }}

连云区18468011806: 什么是JAVA脚本
务鸦复方: 就是写在jsp中的java语句.就是java脚本

连云区18468011806: java是脚本语言吗?怎么跟脚本语言的定义很像,都是需要专门的解释器解释执行,是不是一个介于编译语 -
务鸦复方: java需要解释器执行是为了提供良好的跨平台性能,java很强大,如果把java仅仅看成脚本语言那就太小看它了,可以这样认为:java是与C语言重量级相当的语言,好好学吧,你会喜欢上它的

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网