myuan f664095ea8 init 3 yıl önce
..
抽象语法树编译到 llvm.代码 f664095ea8 init 3 yıl önce
code-examples.ve f664095ea8 init 3 yıl önce
readme.md f664095ea8 init 3 yıl önce
抽象语法树编译到 llvm.e f664095ea8 init 3 yıl önce

readme.md

抽象语法树编译到 llvm

上一节: https://bbs.125.la/thread-14706398-1-1.html 源代码 git: http://gogs.mkyr.fun:99/myuan/elang

目标

本节的目标是把上一节的「语言」编译到 llvm, 不过要想简单快捷地生成 llvm IR, 官方的方案是 C++, 也有一些其他语言的绑定, 比如 Python/Julia, 总而言之, 这一节把 AST 用易语言输出出去后, 就不得不远离易语言了.

另外还有一个选项是 binaryen, 如果是 binaryen IR 的话, 倒还可以用易语言手写生成, 但是 binaryen 最终是运行在 wasm 上的, 不直接原生运行的话, 就代表着无法简单使用操作系统 API, 以及与已有的易语言生态相容.

未来

与其他方案对比后, 如果 llvm 的效果很好, 接下来就可以着手

  1. 使用 Antla 的易语言解析器
  2. 使用易语言编写的易语言语法扩展工具
  3. 使用扩展后的易语言书写语法扩展工具
  4. 交替使用流程1/2得到的新易语言, 这里称之为 nelang
  5. 使用 nelang, 书写生成 nelang 在 llvm IR 的工具
  6. 使用以 llvm 编译后的静态文件将 nelang AST 生成 llvm IR
  7. 使用 nelang 补全 nelang 的标准库
  8. 至此 nelang 可以脱离原版易语言, 实现自举, 得益于 llvm, 现在 nelang 可以运行在三大系统, 多种架构了.

这个科学计算器语言就告一段落了, 到现在我还没有给它起一个名字(

可以从本节到达的其他方向

读过这四篇之后, 你应该可以很简单地把易语言子集静态编译出去了, 如果你感兴趣的话, 不如来试试?