java中的自定义解释器

时间:2011-05-21 15:47:18

标签: java interpreter

您好
我想编写一个能够解析的程序。执行一些文件
该文件由一些自定义命令组成(我希望能够定义命令和适当的方法,因此当程序看到该命令时,它应该执行相应的方法)
它的语法对我来说并不重要;我只是想能够定义命令
就像用java编写的简单小解释器一样 有没有为此目的的图书馆?
或者我需要自己写作?

由于

5 个答案:

答案 0 :(得分:4)

Java 6(及更新版本)在标准库中有这个:看一下包javax.script的API文档。您可以使用它来使用任何脚本语言从Java程序运行脚本(例如自动化程序),其中有javax.script API可用的插件引擎。默认情况下,提供对JavaScript的支持。

请参阅Java Scripting Programmer's Guide

该指南中的简单示例:

import javax.script.*;
public class EvalScript {
    public static void main(String[] args) throws Exception {
        // create a script engine manager
        ScriptEngineManager factory = new ScriptEngineManager();
        // create a JavaScript engine
        ScriptEngine engine = factory.getEngineByName("JavaScript");
        // evaluate JavaScript code from String
        engine.eval("print('Hello, World')");
    }
}

答案 1 :(得分:2)

你考虑过看看BeanShell吗?

提供在运行时解释类似Java的片段。

如果您需要更多,请考虑嵌入,例如JPython或其他小型翻译。只需选择一个符合JSR-233标准即可获得通用调试支持。

答案 2 :(得分:1)

您可以使用ANTLR,但您必须定义语法(将为您生成解析器)。

检查此expression elevator example,它与您的问题类似,但不是读取文件,而是从标准输入读取。

如果您选择ANTLR,请查看ANTLRWorks,它是一个有助于ANTLR开发的GUI(我认为它也可以作为Eclipse插件使用)。

答案 3 :(得分:1)

您需要的是“脚本引擎”。快速搜索显示Rhino。这是一个很好的选择,因为它是JavaScript,很多人都知道JavaScript,并且存在一定数量的第三方扩展(库和代码片段)。

答案 4 :(得分:0)

我知道这是一个旧线程,但前段时间我已经实现了一个与JavaScript类似的语言(有更多限制)的小型解释器,代码在Github上发布https://github.com/guilhermelabigalini/interpreter

但它确实支持IF / CASE / LOOPS / FUNCTIONs,见下文:

function factorial(n) {
  if (n == 1) 
    return 1;

   return n * factorial(n - 1);
}

var x = factorial(6);