Browse Source

添加说明

myuan 3 years ago
parent
commit
3390038048
1 changed files with 45 additions and 0 deletions
  1. 45 0
      4. 抽象语法树编译到 llvm/readme.md

+ 45 - 0
4. 抽象语法树编译到 llvm/readme.md

@@ -10,6 +10,51 @@
 
 另外还有一个选项是 binaryen, 如果是 binaryen IR 的话, 倒还可以用易语言手写生成, 但是 binaryen 最终是运行在 wasm 上的, 不直接原生运行的话, 就代表着无法简单使用操作系统 API, 以及与已有的易语言生态相容. 
 
+## AST 导出
+
+
+
+## 函数实现
+
+在虚拟机中, 我自己写的代码可以随意操作逻辑, 但是到 llvm 层面, 就得自己新加逻辑来控制常量匹配了. 以如下代码举例:
+
+```
+f(0) = 1
+f(x) = x * f(x - 1)
+f(x, y) = f(x) + f(y)
+```
+
+应当编译成四个函数, 一个总入口, 三个子函数
+
+```c
+// f(0)
+inline double f1() {
+    return 1
+} 
+// f(x)
+inline double f2(double x) {
+    return x * f(x - 1)
+}
+// f(x, y)
+inline double f3(double x, double y) {
+    return f(x) + f(y)
+}
+
+double f(double args[], int args_count) {
+    switch (args_count) {
+        case 1:
+            if (x == 0) 
+                return f1()
+            else
+                return f2(x) 
+        case 2:
+            return f3(args[0], args[1])
+    }
+}
+
+```
+
+然后这门语言除了函数就没东西了, 就这样
 
 ## 未来