扩展Nashorn-ecma引擎以添加新的运算符和类型

Extending Nashorn ecma engine to add new operators and types

本文关键字:运算符 类型 添加 Nashorn-ecma 引擎 扩展      更新时间:2023-09-26

我们公司以前的一位开发人员已经实现了他们自己的javascript引擎,我们想用Nashorn来取代它。

他已经实现了ECMA标准的一个子集,所以理论上这应该是一个相当直接的操作,只是他稍微扩展了语言!

最好用他的语言可以支持的语法示例来解释。

var today = now(); //create a proprietary object that represents time
var tomorrow = today + 1d;  //Add a day. NOTE 1h is NOT a constant 

可以看出他有

  • 将运算符重载添加到他自己的Time类中
  • 引入了一种新的表示持续时间的数字"类型"。这种类型可以用1d、3d4h5s、1h、5m等模式实例化。代码知道如何为时间加/减这些数字

等效的javascript代码是

 var today = now(); //create a proprietary object that represents time
 var tomorrow = today.plus( new Duration( '1d'));  //Add a day. 

我想知道Nashorn是否有任何"钩子",这样我们就可以用这些"特性"扩展语言,还是需要重写所有的脚本?

感谢

Richard

不,nashorn没有任何钩子来扩展所实现的语言。我想在将脚本提交给nashorn引擎之前,您需要对脚本进行预处理,比如解析器,并将这样的"+"替换为".plus"调用等等。