2. javascript 引擎Rhino源代码分析 简单代码分析

本文详细介绍了JavaScript引擎Rhino的工作原理,包括解析AST抽象语法树,转换为IR内部表现形式,生成byteCode虚拟字节码,以及通过解释器逐条执行指令的过程。特别关注了Context的evaluateString()方法和Interpreter.interpret()在执行过程中的作用,揭示了Rhino如何处理变量绑定、数值操作和返回结果。
摘要由CSDN通过智能技术生成

  • 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值