Browse Source

完成一些递归下降器

myuan 3 years ago
parent
commit
98680c85a5

BIN
2. 词法分析科学计算器/词法分析科学计算器.e


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

@@ -20,7 +20,7 @@
 
 .子程序 _销毁, , , 当基于本类的对象被销毁前,此方法会被自动调用
     .如果真 (已初始化)
-        调试输出 (格式化文本 (“警告: %x : %s 未释放内存而销毁”, 到整数 (当前节点指针), 获取函数名 ()))
+        ' 调试输出 (格式化文本 (“警告: %x : %s 未释放内存而销毁”, 到整数 (当前节点指针), 获取函数名 ()))
     .如果真结束
     
 

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

@@ -8,7 +8,9 @@
     .局部变量 迭代次数, 整数型
     .局部变量 i, 整数型
 
-    .计次循环首 (10000, )
+    .局部变量 词, 词, , "0"
+
+    .计次循环首 (100, )
         
         a.初始化内存 (“sincos67890123456”)
         
@@ -35,6 +37,9 @@
     .计次循环尾 ()
     
     
+    语法分析并输出 (“2 * (3 + 4) + f1(1, 2, time(), 4)”)
+    
+    
     .判断循环首 (真)
         标准输出 (, “> ”)
         解析命令 (标准输入 ())

+ 71 - 3
2. 词法分析科学计算器/词法分析科学计算器.代码/代码/语法分析程序集.static.e.txt

@@ -1,18 +1,86 @@
 .版本 2
+.支持库 spec
 
 .程序集 语法分析程序集
+.程序集变量 AST根, 抽象语法树节点
+.程序集变量 词, 词, , "0"
+.程序集变量 当前词游标, 整数型
+
 .子程序 语法分析
-    .参数 表达式, 文本型
-    .参数 返回值, 词, 参考 数组
+    .参数 _词, 词, 数组
 
+    复制数组 (词, _词)
+    当前词游标 = 1
+    AST根.初始化内存 (“根”)
     
+    .判断循环首 (当前词游标 < 取数组成员数 (词))
+        匹配表达式 ()
+    .判断循环尾 ()
     
 
-.子程序 输出语法分析结果
+.子程序 匹配表达式
+    .局部变量 节点, 抽象语法树节点
+
+    .如果真 (下个词 ().类型 = #词类_数字)
+        调试输出 (“遇到数字”, 下个词 ().内容)
+        节点.初始化内存 (“遇到数字 ” + 下个词 ().内容)
+        AST根.添加参数节点 (节点)
+        
+    .如果真结束
+    词游标自增 ()
+    
+
+.子程序 下个词, 词
+    .局部变量 返回词, 词
+
+    
+    .如果 (当前词游标 > 取数组成员数 (词))
+        返回词.内容 = “”
+        返回词.类型 = #词类_结尾
+    .否则
+        返回词 = 词 [当前词游标]
+    .如果结束
     
+    返回 (返回词)
+
+.子程序 词游标自增
+    当前词游标 = 当前词游标 + 1
+    
+
+.子程序 重复文本, 文本型
+    .参数 n, 整数型
+    .参数 s, 文本型
+    .局部变量 res, 文本型
+
+    res = “”
+    .计次循环首 (n, )
+        res = res + s
+    .计次循环尾 ()
+    返回 (res)
+
+.子程序 输出语法分析结果
+    .参数 AST, 抽象语法树节点
+    .参数 当前层级, 整数型, 可空
+    .局部变量 i, 整数型
+
+    .如果真 (是否为空 (当前层级))
+        当前层级 = 0
+    .如果真结束
+    标准输出 (, 重复文本 (当前层级, “ ”))
+    标准输出 (, AST.生成展示文本 () + #换行符)
+    .计次循环首 (AST.获取参数数量 (), i)
+        输出语法分析结果 (AST.获取参数节点 (i), 当前层级 + 1)
+    .计次循环尾 ()
 
 .子程序 语法分析并输出
     .参数 表达式, 文本型
+    .局部变量 t0, 长整数型
 
+    t0 = 时间_取现行时间戳1 (真)
+    词法分析 (表达式, 词)
+    语法分析 (词)
+    标准输出 (, “用时 ” + 到文本 (时间_取现行时间戳1 (真) - t0) + “ms” + #换行符)
+    输出语法分析结果 (AST根)
+    
     
 

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

@@ -11,6 +11,8 @@
 .常量 词类_逗号, "8"
 .常量 词类_空格, "9"
 .常量 词类型枚举数量, "9"
+.常量 词类_结尾, "99999"
+
 
 
 .常量 语法树节点_函数名最大长度, "16"

+ 25 - 25
2. 词法分析科学计算器/词法分析科学计算器.代码/日志/信息.log

@@ -1,25 +1,25 @@
-2021-11-07 18:50:05 [信息] [ SectionCode::ParseLibInfo ]               开始解析【支持库】数据
-2021-11-07 18:50:05 [信息] [ SectionCode::ParseLibInfo ]               完成解析【支持库】数据
-2021-11-07 18:50:05 [信息] [ SectionCode::ParseClasses ]               开始解析【类/程序集】数据
-2021-11-07 18:50:05 [信息] [ SectionCode::ParseClasses ]               完成解析【类/程序集】数据
-2021-11-07 18:50:05 [信息] [ SectionCode::ParseStructs ]               开始解析【自定义】数据
-2021-11-07 18:50:05 [信息] [ SectionCode::ParseStructs ]               完成解析【自定义】数据
-2021-11-07 18:50:05 [信息] [ SectionCode::WriteTxtCode ]               开始写出文本代码
-2021-11-07 18:50:05 [信息] [ SectionCode::WriteTxtCode ]               正在创建代码目录 [目录] C:/Users/myuan/Desktop/elang/2. 词法分析科学计算器/词法分析科学计算器.代码/代码
-2021-11-07 18:50:05 [信息] [ SectionCode::WriteTxtCode ]               开始写出【类/程序集】文本代码
-2021-11-07 18:50:05 [信息] [ SectionCode::WriteTxtCode_Class ]         正在写出【程序集】文本代码 [程序集] 程序集1
-2021-11-07 18:50:05 [信息] [ SectionCode::WriteTxtCode_Class ]         正在写出【程序集】文本代码 [程序集] 词法分析程序集
-2021-11-07 18:50:05 [信息] [ SectionCode::WriteTxtCode_Class ]         正在写出【程序集】文本代码 [程序集] 来自精易模块
-2021-11-07 18:50:05 [信息] [ SectionCode::WriteTxtCode_Class ]         正在写出【程序集】文本代码 [程序集] 语法分析程序集
-2021-11-07 18:50:05 [信息] [ SectionCode::WriteTxtCode_Class ]         正在写出【类】文本代码 [类] 抽象语法树节点
-2021-11-07 18:50:05 [信息] [ SectionCode::WriteTxtCode_Class ]         正在写出【程序集】文本代码 [程序集] 内存读写
-2021-11-07 18:50:05 [信息] [ SectionCode::WriteTxtCode ]               开始写出【DLL】文本代码
-2021-11-07 18:50:05 [信息] [ SectionCode::WriteTxtCode_Dlls ]          开始写出【DLL】文本代码
-2021-11-07 18:50:05 [信息] [ SectionCode::WriteTxtCode_Dlls ]          完成写出【DLL】文本代码
-2021-11-07 18:50:05 [信息] [ SectionCode::WriteTxtCode ]               开始写出【全局变量】文本代码
-2021-11-07 18:50:05 [信息] [ SectionCode::WriteTxtCode ]               开始写出【自定义数据】文本代码
-2021-11-07 18:50:05 [信息] [ SectionCode::WriteTxtCode_Structs ]       开始写出【自定义】文本代码
-2021-11-07 18:50:05 [信息] [ SectionCode::WriteTxtCode_Structs ]       完成写出【自定义】文本代码
-2021-11-07 18:50:05 [信息] [ SectionCode::WriteTxtCode ]               开始写出【支持库】信息
-2021-11-07 18:50:05 [信息] [ SectionCode::WriteTxtCode ]               开始写出【图标】文件 [路径] C:/Users/myuan/Desktop/elang/2. 词法分析科学计算器/词法分析科学计算器.代码/图标.ico
-2021-11-07 18:50:05 [信息] [ SectionCode::WriteTxtCode ]               完成写出文本代码
+2021-11-07 22:36:53 [信息] [ SectionCode::ParseLibInfo ]               开始解析【支持库】数据
+2021-11-07 22:36:53 [信息] [ SectionCode::ParseLibInfo ]               完成解析【支持库】数据
+2021-11-07 22:36:53 [信息] [ SectionCode::ParseClasses ]               开始解析【类/程序集】数据
+2021-11-07 22:36:53 [信息] [ SectionCode::ParseClasses ]               完成解析【类/程序集】数据
+2021-11-07 22:36:53 [信息] [ SectionCode::ParseStructs ]               开始解析【自定义】数据
+2021-11-07 22:36:53 [信息] [ SectionCode::ParseStructs ]               完成解析【自定义】数据
+2021-11-07 22:36:53 [信息] [ SectionCode::WriteTxtCode ]               开始写出文本代码
+2021-11-07 22:36:53 [信息] [ SectionCode::WriteTxtCode ]               正在创建代码目录 [目录] C:/Users/myuan/Desktop/elang/2. 词法分析科学计算器/词法分析科学计算器.代码/代码
+2021-11-07 22:36:53 [信息] [ SectionCode::WriteTxtCode ]               开始写出【类/程序集】文本代码
+2021-11-07 22:36:53 [信息] [ SectionCode::WriteTxtCode_Class ]         正在写出【程序集】文本代码 [程序集] 程序集1
+2021-11-07 22:36:53 [信息] [ SectionCode::WriteTxtCode_Class ]         正在写出【程序集】文本代码 [程序集] 词法分析程序集
+2021-11-07 22:36:53 [信息] [ SectionCode::WriteTxtCode_Class ]         正在写出【程序集】文本代码 [程序集] 来自精易模块
+2021-11-07 22:36:53 [信息] [ SectionCode::WriteTxtCode_Class ]         正在写出【程序集】文本代码 [程序集] 语法分析程序集
+2021-11-07 22:36:53 [信息] [ SectionCode::WriteTxtCode_Class ]         正在写出【类】文本代码 [类] 抽象语法树节点
+2021-11-07 22:36:53 [信息] [ SectionCode::WriteTxtCode_Class ]         正在写出【程序集】文本代码 [程序集] 内存读写
+2021-11-07 22:36:53 [信息] [ SectionCode::WriteTxtCode ]               开始写出【DLL】文本代码
+2021-11-07 22:36:53 [信息] [ SectionCode::WriteTxtCode_Dlls ]          开始写出【DLL】文本代码
+2021-11-07 22:36:53 [信息] [ SectionCode::WriteTxtCode_Dlls ]          完成写出【DLL】文本代码
+2021-11-07 22:36:53 [信息] [ SectionCode::WriteTxtCode ]               开始写出【全局变量】文本代码
+2021-11-07 22:36:53 [信息] [ SectionCode::WriteTxtCode ]               开始写出【自定义数据】文本代码
+2021-11-07 22:36:53 [信息] [ SectionCode::WriteTxtCode_Structs ]       开始写出【自定义】文本代码
+2021-11-07 22:36:53 [信息] [ SectionCode::WriteTxtCode_Structs ]       完成写出【自定义】文本代码
+2021-11-07 22:36:53 [信息] [ SectionCode::WriteTxtCode ]               开始写出【支持库】信息
+2021-11-07 22:36:53 [信息] [ SectionCode::WriteTxtCode ]               开始写出【图标】文件 [路径] C:/Users/myuan/Desktop/elang/2. 词法分析科学计算器/词法分析科学计算器.代码/图标.ico
+2021-11-07 22:36:53 [信息] [ SectionCode::WriteTxtCode ]               完成写出文本代码