Browse Source

添加父节点和首部插入

myuan 3 years ago
parent
commit
fd41139ffd

+ 101 - 4
2. 词法分析科学计算器/词法分析科学计算器.代码/代码/抽象语法树节点.class.e.txt

@@ -5,6 +5,7 @@
 .程序集 抽象语法树节点, , 公开
 .程序集变量 当前节点指针, 长整数型
 .程序集变量 已初始化, 逻辑型
+.程序集变量 失败, 逻辑型
 
 .子程序 _初始化, , , 当基于本类的对象被创建后,此方法会被自动调用
     已初始化 = 假
@@ -26,18 +27,24 @@
 
 .子程序 初始化内存, , 公开
     .参数 函数名, 文本型, 可空
+    .参数 父节点地址, 长整数型, 可空
 
     当前节点指针 = 到长整数 (申请内存 (#语法树节点_长度, 真))
     .如果真 (是否为空 (函数名) = 假)
         设置函数名 (函数名)
     .如果真结束
-    
+    .如果真 (是否为空 (父节点地址) = 假)
+        设置父节点指针地址 (父节点地址)
+    .如果真结束
+    调试输出 (“设置参数指针地址”)
     设置参数指针地址 (申请内存 (#语法树节点_参数容量初始值 × #指针大小, 真))
     设置参数容量 (#语法树节点_参数容量初始值)
     
     已初始化 = 真
     
-    
+
+.子程序 初始化否, 逻辑型
+    返回 (已初始化)
 
 .子程序 释放结构内存, , 公开
     .如果真 (获取参数容量 () ≠ 0)
@@ -45,6 +52,37 @@
     .如果真结束
     释放内存 (当前节点指针)
     已初始化 = 假
+    
+    
+
+.子程序 生成子节点, 抽象语法树节点, 公开
+    .参数 子节点函数名, 文本型, 可空
+    .局部变量 ast, 抽象语法树节点
+
+    .如果 (是否为空 (子节点函数名))
+        ast.设置函数名 (子节点函数名)
+    .否则
+        ast.设置函数名 (格式化文本 (“%s 的子节点”, 获取函数名 ()))
+    .如果结束
+    ast.设置父节点指针地址 (获取当前节点指针 ())
+    返回 (ast)
+
+.子程序 生成匹配失败节点, 抽象语法树节点, 公开
+    .局部变量 ast, 抽象语法树节点
+
+    ast = 生成子节点 (格式化文本 (“%s 的失败子节点”, 获取函数名 ()))
+    ast._设置失败 ()
+    返回 (ast)
+
+.子程序 失败, 逻辑型, 公开
+    返回 (失败)
+
+.子程序 成功, 逻辑型, 公开
+    返回 (失败 = 假)
+
+.子程序 _设置失败, , 公开
+    失败 = 真
+    已初始化 = 假
 
 .子程序 从内存初始化, 抽象语法树节点, 公开
     .参数 地址, 长整数型
@@ -135,9 +173,10 @@
     
     写到内存 (旧参数数组打包, 新参数指针地址, 获取参数数量 () × #指针大小)
     释放内存 (旧参数指针地址)
+    
     设置参数指针地址 (新参数指针地址)
-    设置参数容量 (新长度)
     
+    设置参数容量 (新长度)
     返回 (新参数指针地址)
 
 .子程序 添加参数节点, , 公开
@@ -149,10 +188,52 @@
     .如果真 (当前参数数量 ≥ 获取参数容量 ())
         扩容参数指针 ()
     .如果真结束
-    
+    节点.设置父节点指针地址 (获取当前节点指针 ())
     写到内存 (节点.获取当前节点指针 (), 获取参数指针地址 () + 当前参数数量 × #指针大小, )
     设置参数数量 (当前参数数量 + 1)
 
+.子程序 插入参数节点, , 公开
+    .参数 节点, 抽象语法树节点
+    .局部变量 当前参数数量, 整数型
+    .局部变量 新参数指针地址, 整数型
+    .局部变量 旧参数数组打包, 字节集
+    .局部变量 旧参数指针地址, 长整数型
+
+    当前参数数量 = 获取参数数量 ()
+    .如果真 (当前参数数量 ≥ 获取参数容量 ())
+        扩容参数指针 ()
+    .如果真结束
+    
+    旧参数指针地址 = 获取参数指针地址 ()
+    旧参数数组打包 = 获取参数数组字节集 ()
+    新参数指针地址 = 申请内存 (获取参数容量 () × #指针大小, 真)
+    
+    写到内存 (到字节集 (节点.获取当前节点指针 ()) + 旧参数数组打包, 新参数指针地址, (当前参数数量 + 1) × #指针大小)
+    释放内存 (旧参数指针地址)
+    
+    设置参数指针地址 (新参数指针地址)
+    设置参数数量 (当前参数数量 + 1)
+    
+
+.子程序 生成自词节点, 抽象语法树节点, 公开
+    .参数 词, 词
+    .局部变量 n, 抽象语法树节点
+
+    n.初始化内存 (词.内容)
+    返回 (n)
+
+.子程序 添加词节点, , 公开
+    .参数 词, 词
+
+    添加文本节点 (词.内容)
+
+.子程序 添加文本节点, , 公开
+    .参数 文本, 文本型
+    .局部变量 n, 抽象语法树节点
+
+    n.初始化内存 (文本)
+    添加参数节点 (n)
+
 .子程序 获取参数节点, 抽象语法树节点, 公开
     .参数 i, 整数型, 可空
 
@@ -166,3 +247,19 @@
     返回 (格式化文本 (“%s | 基地址: %x | 参数数量: %d | 参数容量: %d | 参数数组地址: %x ”, 获取函数名 (), 到整数 (获取当前节点指针 ()), 到整数 (获取参数数量 ()), 到整数 (获取参数容量 ()), 到整数 (获取参数指针地址 ())))
     
 
+.子程序 设置父节点, , 公开
+    .参数 父节点, 抽象语法树节点
+
+    设置父节点指针地址 (父节点.获取当前节点指针 ())
+
+.子程序 设置父节点指针地址, , 公开
+    .参数 地址, 长整数型
+
+    写到内存 (地址, 当前节点指针 + #语法树节点_父节点指针偏移, #指针大小)
+
+.子程序 获取父节点指针地址, 长整数型, 公开, 已经不在本结构体了, 在远处了
+    返回 (取字节集数据 (指针到字节集 (当前节点指针 + #语法树节点_父节点指针偏移, #指针大小), #长整数型, ))
+
+.子程序 获取父节点, 抽象语法树节点, 公开
+    返回 (从内存初始化 (获取父节点指针地址 ()))
+

+ 9 - 6
2. 词法分析科学计算器/词法分析科学计算器.代码/代码/程序集1.static.e.txt

@@ -10,18 +10,21 @@
 
     .局部变量 词, 词, , "0"
 
-    .计次循环首 (100, )
+    .计次循环首 (0, )
         
         a.初始化内存 (“sincos67890123456”)
         
         ' 调试输出 (“a初始生成展示文本”, a.生成展示文本 ())
         
-        迭代次数 = 9
+        迭代次数 = 17
         .计次循环首 (迭代次数, i)
-            b.初始化内存 (到文本 (i))
+            ' 调试输出 (“准备初始化”)
+            b.初始化内存 (到文本 (i) + 到文本 (i) + 到文本 (i) + 到文本 (i) + 到文本 (i) + 到文本 (i) + 到文本 (i))
             ' 调试输出 (“准备把b添加到a子节点”, b.生成展示文本 ())
             ' 调试输出 (“准备把b添加到a子节点”)
-            a.添加参数节点 (b)
+            a.插入参数节点 (b)
+            ' 调试输出 (“添加到a子节点”)
+            
         .计次循环尾 ()
         
         ' 调试输出 (“a添加节点展示文本”, a.生成展示文本 ())
@@ -36,9 +39,9 @@
         
     .计次循环尾 ()
     
+    语法分析并输出 (“1*2*3*4*5*6”)
     
-    语法分析并输出 (“2 * (3 + 4) + f1(1, 2, time(), 4)”)
-    
+    ' 语法分析并输出 (“2*3-1*4+5/6-7”)
     
     .判断循环首 (真)
         标准输出 (, “> ”)

+ 8 - 6
2. 词法分析科学计算器/词法分析科学计算器.代码/常量.e.txt

@@ -15,12 +15,14 @@
 
 
 
-.常量 语法树节点_函数名最大长度, "16"
-.常量 语法树节点_函数名偏移, "0", , 长: 16
-.常量 语法树节点_参数量偏移, "16", , 长: 4
-.常量 语法树节点_参数容量偏移, "20", , 长: 4
-.常量 语法树节点_参数指针偏移, "24", , 长: 8
-.常量 语法树节点_长度, "32"
+.常量 语法树节点_函数名最大长度, "24"
+.常量 语法树节点_函数名偏移, "0", , 长: 40
+.常量 语法树节点_参数量偏移, "40", , 长: 4
+.常量 语法树节点_参数容量偏移, "44", , 长: 4
+.常量 语法树节点_参数指针偏移, "48", , 长: 8
+.常量 语法树节点_父节点指针偏移, "56", , 长: 8
+.常量 语法树节点_长度, "64"
 .常量 语法树节点_参数容量初始值, "8"
 .常量 语法树节点_参数容量扩张系数, "2"
+.常量 语法树节点_匹配失败, "-1"
 .常量 指针大小, "8"