- 1. 简介
本例子通过执行最简单的javascript: var result = 1;
来分析Rhino如何解析,转换,编译,执行。。。
- 2. 基本测试代码
public static void main(String[] args){
//Context 用来存储对应线程的数据,一个线程只对应唯一的context
Context ctx = Context.enter();
//scope表示一组javascript对象,保存执行javascript需要的全部标准对象和全局函数
Scriptable scope = ctx.initSafeStandardObjects();
//设置js优化级别,有-1到9,其中 -1表示直接解释执行;
ctx.setOptimizationLevel(-1);
try{
//传入并执行javascript代码
ctx.evaluateString(scope, "var result=1;", "", 1, null);
}catch(Exception e){
e.printStackTrace();
}finally{
Context.exit();
}
}
- 3. AST抽象语法树转换过程
解析器解析及转换AST:
//具体见Context.compileImpl()方法;
Parser p = new Parser(compilerEnv, compilationErrorReporter);
AstRoot ast = p.parse(sourceString, sourceName, lineno);
- 4. IRFactory将ast语法树转换成为内部表现形式
ast语法树转换成为IR内部表现形式代码:
//具体见Context.compileImpl()方法;
IRFactory irf = new IRFactory(compilerEnv, compilat