标签: coreerlang

通过核心Erlang编译Erlang到Javascript

所以开始在LuvvieScript上取得进展,然后在Twitter上开始了一些... https://twitter.com/gordonguthrie/status/389659700741943296

Anthony Ramine https://twitter.com/nokusu指出我做错了,我应该通过Core Erlang而不是Erlang AST从Erlang编译成JavaScript.这对我来说是一个引人注目但又没有吸引力的选择......推特不是讨论的正确媒介我想我会在这里写下来并得到一些建议.

战略概述

LuvvieScript有三个核心要求:

  • Erlang的有效子集,编译为相同且高性能的Javascript
  • 一个完整的源映射,以便可以在浏览器中使用LuvvieScript而不是Javascript进行调试
  • 一个'运行时'客户端javascript环境(带有服务器端通信)来执行LuvvieScript模块(一种页内主管...)

这些选项中的第三个有点超出了本次辩论的范围,但前两个是核心.

有一个懒惰的结果 - 我想尽可能多地使用Erlang和Javascript语法工具(词法分析器,解析器,标记器,AST变换等等)并编写最少量的代码.

当前的思考

代码当前的编写方式如下:

基本上我得到一个看起来像这样的Erlang AST:

 [{function,
      {19,{1,9}},
      atom1_fn,0,
      [{clause,
           {19,none},
           [],
           [[]],
           [{match,
                {20,none},
                [{var,{20,{5,6}},'D'}],
                [{atom,{20,{11,15}},blue}]},
            {var,{21,{5,6}},'D'}]}]}]},
Run Code Online (Sandbox Code Playgroud)

然后我将其转换为Javascript JSON AST,如下所示:

{
    "type": "Program",
    "body": [
        {
            "type": "VariableDeclaration",
            "declarations": [
                {
                    "type": "VariableDeclarator",
                    "id": {
                        "type": "Identifier",
                        "name": "answer",
                        "loc": {
                            "start": {
                                "line": 2,
                                "column": …
Run Code Online (Sandbox Code Playgroud)

javascript compiler-construction erlang source-maps coreerlang

9
推荐指数
1
解决办法
1885
查看次数