Ver Fonte

添加根语类和注释

myuan há 3 anos atrás
pai
commit
81ac1627cf

+ 1 - 1
3. 简单的数值语言及其虚拟机/简单的数值语言及其虚拟机.代码/代码/抽象语法树节点.class.e.txt

@@ -327,7 +327,7 @@
     .局部变量 当前掩码, 整数型
 
     ' 返回 (格式化文本 (“%s | 基地址: %x | 参数数量: %d | 参数容量: %d | 参数数组地址: %x ”, 获取函数名 (), 到整数 (获取当前节点指针 ()), 到整数 (获取参数数量 ()), 到整数 (获取参数容量 ()), 到整数 (获取参数指针地址 ())))
-    语类展示名集合 = { “语类_未定义”, “语类_定义”, “语类_函数调用”, “语类_函数原型”, “语类_形式参数”, “语类_实际参数” }
+    语类展示名集合 = { “语类_未定义”, “语类_定义”, “语类_函数调用”, “语类_函数原型”, “语类_形式参数”, “语类_实际参数”, “语类_根” }
     语类 = 获取语类 ()
     .如果 (语类 = 0)
         语类展示名 = 语类展示名 + 语类展示名集合 [语类 + 1]

+ 1 - 2
3. 简单的数值语言及其虚拟机/简单的数值语言及其虚拟机.代码/代码/排序.list.txt

@@ -3,5 +3,4 @@
 来自精易模块
 语法分析程序集
 抽象语法树节点
-即时解释虚拟机
-哈希表
+即时解释虚拟机

+ 13 - 7
3. 简单的数值语言及其虚拟机/简单的数值语言及其虚拟机.代码/代码/程序集1.static.e.txt

@@ -2,11 +2,10 @@
 
 .程序集 程序集1
 .子程序 _启动子程序, 整数型, , 本子程序在程序启动后最先执行
-    语法分析并输出 (“sin(x, y, f(g(h(z))))”)
-    语法分析并输出 (“f(g, x) = g(x)”)
-    语法分析并输出 (“h(1, i(2, t(3) + 4*(5+6)))”)
-    语法分析并输出 (“1 + 2”)
-    语法分析并输出 (“1 ”)
+    .局部变量 代码, 文本型
+
+    代码 = UTF8到文本 (读入文件 (“code-examples.ve”))
+    解释代码入口 (代码)
     
     
     .判断循环首 (真)
@@ -20,10 +19,12 @@
 .子程序 解析命令
     .参数 命令, 文本型
     .局部变量 t, 文本型, 数组, "0"
+    .局部变量 文件名, 文本型
+    .局部变量 代码, 文本型
 
     ' 支持命令
     ' 「帮助」 「词法分析 some text」 「语法分析 some text」
-    t = 分割文本 (命令, “ ”, 1)
+    t = 分割文本 (命令, “ ”, )
     
     
     .判断开始 (t [1] = “帮助” 或 到半角 (t [1]) = “?”)
@@ -31,7 +32,12 @@
     .判断 (t [1] = “词法分析”)
         词法分析并输出 (取文本右边 (命令, 取文本长度 (命令) - 取文本长度 (“词法分析”)))
     .判断 (t [1] = “语法分析”)
-        语法分析并输出 (取文本右边 (命令, 取文本长度 (命令) - 取文本长度 (“词法分析”)))
+        语法分析并输出 (取文本右边 (命令, 取文本长度 (命令) - 取文本长度 (“语法分析”)))
+    .判断 (t [1] = “运行” 或 t [1] = “run”)
+        文件名 = t [2]
+        代码 = UTF8到文本 (读入文件 (文件名))
+        解释代码入口 (代码)
+        
     .默认
         标准输出 (, “未知命令” + #换行符)
     .判断结束

+ 13 - 3
3. 简单的数值语言及其虚拟机/简单的数值语言及其虚拟机.代码/代码/语法分析程序集.static.e.txt

@@ -6,7 +6,7 @@
 .程序集变量 词, 词, 数组, "0"
 .程序集变量 当前词游标, 整数型, 数组
 
-.子程序 语法分析
+.子程序 语法分析, 抽象语法树节点
     .参数 _词, 词, 数组
     .局部变量 当前节点, 抽象语法树节点, 数组
     .局部变量 res, 抽象语法树节点, 数组
@@ -14,8 +14,9 @@
     复制数组 (词, _词)
     当前词游标 = 0
     AST根.初始化内存 (“根”)
+    AST根.设置语类 (#语类_根)
     
-    .判断循环首 (当前词游标 ≤ 取数组成员数 (词))
+    .判断循环首 (下个词 ().类型 ≠ #词类_结尾)
         res = 匹配语句 (AST根)
         ' 调试输出 (“匹配表达式 结束”, res.生成展示文本 ())
         
@@ -26,17 +27,26 @@
         .如果结束
         跳出循环 ()
     .判断循环尾 ()
-    
+    返回 (AST根)
 
 .子程序 匹配语句, 抽象语法树节点
     .参数 父节点, 抽象语法树节点
     .局部变量 当前节点, 抽象语法树节点
     .局部变量 函数定义, 抽象语法树节点
     .局部变量 表达式, 抽象语法树节点
+    .局部变量 注释, 抽象语法树节点
 
     
     当前节点.初始化内存 (“匹配语句 之起始”, )
     ' 调试输出 (“当前父节点”, 父节点.获取函数名 ())
+    .如果真 (下个词 ().类型 = #词类_注释)
+        注释 = 父节点.生成自词节点 (下个词 ())
+        词游标自增 ()
+        返回 (注释)
+    .如果真结束
+    
+    
+    
     .如果 (词存在 (词, #词类_单等号))
         ' 这是个赋值语句
         函数定义 = 匹配函数定义 (当前节点)

+ 2 - 1
3. 简单的数值语言及其虚拟机/简单的数值语言及其虚拟机.代码/常量.e.txt

@@ -39,6 +39,7 @@
 .常量 语类_函数原型, "4"
 .常量 语类_形式参数, "8"
 .常量 语类_实际参数, "16"
-.常量 语类_nop, "32"
+.常量 语类_根, "32"
+.常量 语类_nop, "64"
 
 .常量 指针大小, "8"