轻量级javascript到javascript解析器

Ray*_*nos 16 javascript compiler-construction parsing

我将如何将轻量级JavaScript写入javascript解析器.简单的东西,可以转换一些代码片段.

我想基本上在函数public中创建内部范围对象.

所以这样的事情

var outer = 42;
window.addEventListener('load', function() {
   var inner = 42;
   function magic() {
       var in_magic = inner + outer;
       console.log(in_magic);
   }
   magic();
}, false);
Run Code Online (Sandbox Code Playgroud)

会编译到

__Scope__.set('outer', 42);
__Scope__.set('console', console);
window.addEventListener('load', constructScopeWrapper(__Scope__, function(__Scope__) {
    __Scope__.set('inner', 42);
    __Scope__.set('magic',constructScopeWrapper(__Scope__, function _magic(__Scope__) {
        __Scope__.set('in_magic', __Scope__.get('inner') + __Scope__.get('outer'));
        __Scope__.get('console').log(__Scope__.get('in_magic'));
    }));
    __Scope__.get('magic')();
}), false);
Run Code Online (Sandbox Code Playgroud)

演示示例

这背后的动机是序列化功能和闭包的状态,并使它们在不同的机器(客户端,服务器,多个服务器)之间保持同步.为此,我需要一个代表[[Scope]]

问题:

  1. 如果不编写完整的JavaScript - >(略有不同)JavaScript编译器,我可以使用这种编译器吗?
  2. 我该如何编写这样的编译器?
  3. 我可以重用现有的js - > js编译器吗?

chj*_*hjj 3

如果你想要一个简单界面的东西,你可以尝试node-burrito: https: //github.com/substack/node-burrito

它使用 uglify-js 解析器生成 AST,然后递归地遍历节点。您所要做的就是提供一个测试每个节点的回调。您可以更改需要更改的内容,它会输出结果代码。