Browse Source

四则运算

myuan 2 years ago
commit
f3eab59104

BIN
1. 四则运算/四则运算解析器.e


BIN
1. 四则运算/四则运算解析器.代码/代码.e


+ 1 - 0
1. 四则运算/四则运算解析器.代码/代码/排序.list.txt

@@ -0,0 +1 @@
+程序集1

+ 3 - 0
1. 四则运算/四则运算解析器.代码/代码/目录.desc.json

@@ -0,0 +1,3 @@
+{
+    "ExpandedDirs": []
+}

+ 213 - 0
1. 四则运算/四则运算解析器.代码/代码/程序集1.static.e.txt

@@ -0,0 +1,213 @@
+.版本 2
+
+.程序集 程序集1
+.子程序 _启动子程序, 整数型, , 本子程序在程序启动后最先执行
+    求值并输出 (“12345”)
+    求值并输出 (“1+1”)
+    求值并输出 (“1+2*3”)
+    求值并输出 (“1-999+999*2”)
+    求值并输出 (“(1)”)
+    求值并输出 (“(1+1)”)
+    求值并输出 (“(1) + (2) + (3) * (4)”)
+    求值并输出 (“(1) + (2) + (3) * (4)*8”)
+    求值并输出 (“10 * (2 + 2)”)
+    求值并输出 (“10 * (2 + 2) +  2 * (808080 - 808080)”)
+    
+    .判断循环首 (真)
+        标准输出 (, “> ”)
+        求值并输出 (标准输入 ())
+    .判断循环尾 ()
+    
+    
+    返回 (0) ' 可以根据您的需要返回任意数值
+
+.子程序 求值并输出
+    .参数 exp, 文本型
+    .局部变量 res, 四则运算栈
+
+    res = 求值 (exp)
+    标准输出 (, exp + “ 之计算结果为 ” + 到文本 (res.操作数栈 [1]) + #换行符)
+    
+
+.子程序 求值, 四则运算栈, 公开
+    .参数 表达式, 文本型
+    .局部变量 res, 四则运算栈
+    .局部变量 i, 整数型
+    .局部变量 等待下一数字, 逻辑型
+    .局部变量 当前字符, 文本型
+    .局部变量 当前操作数, 整数型
+
+    .局部变量 括号求值结果, 四则运算栈
+
+    重定义数组 (res.操作符栈, 假, 0)
+    重定义数组 (res.操作数栈, 假, 0)
+    res.已食用文本 = 表达式
+    
+    i = 1
+    等待下一数字 = 假
+    .判断循环首 (i ≤ 取文本长度 (表达式))
+        当前字符 = 取文本中间 (表达式, i, 1)
+        
+        .判断开始 (寻找文本 (“0123456789”, 当前字符, , 假) ≠ -1)
+            当前操作数 = 到整数 (当前字符)
+            标准输出 (, “遇到数: ” + 当前字符 + #换行符)
+            
+            .判断循环首 (i + 1 ≤ 取文本长度 (表达式) 且 寻找文本 (“0123456789”, 取文本中间 (表达式, i + 1, 1), , 假) ≠ -1)
+                标准输出 (, “遇到数: ” + 取文本中间 (表达式, i + 1, 1) + #换行符)
+                
+                当前操作数 = 当前操作数 × 10 + 到整数 (取文本中间 (表达式, i + 1, 1))
+                i = i + 1
+            .判断循环尾 ()
+            加入成员 (res.操作数栈, 当前操作数)
+            
+        .判断 (寻找文本 (“+-*/”, 当前字符, , 假) ≠ -1)
+            标准输出 (, “遇到符: ” + 当前字符 + #换行符)
+            
+            加入成员 (res.操作符栈, 当前字符)
+            合并栈 (res.操作符栈, res.操作数栈, 假)
+            
+        .判断 (寻找文本 (“(”, 当前字符, , 假) ≠ -1)
+            标准输出 (, “准备求值括号内容: ” + 取文本右边 (表达式, 取文本长度 (表达式) - i) + #换行符)
+            
+            括号求值结果 = 求值 (取文本右边 (表达式, 取文本长度 (表达式) - i))
+            加入成员 (res.操作数栈, 括号求值结果.操作数栈 [1])
+            标准输出 (, “已食用文本: ” + 括号求值结果.已食用文本 + #换行符)
+            i = i + 取文本长度 (括号求值结果.已食用文本)
+        .判断 (寻找文本 (“)”, 当前字符, , 假) ≠ -1)
+            res.已食用文本 = 取文本左边 (res.已食用文本, i)
+            合并栈 (res.操作符栈, res.操作数栈, 真)
+            返回 (res)
+        .默认
+            
+        .判断结束
+        等待下一数字 = 取反 (等待下一数字)
+        i = i + 1
+    .判断循环尾 ()
+    合并栈 (res.操作符栈, res.操作数栈, 真)
+    
+    res.已食用文本 = 取文本左边 (res.已食用文本, i)
+    
+    返回 (res)
+
+.子程序 合并栈
+    .参数 操作符栈, 文本型, 数组
+    .参数 操作数栈, 整数型, 数组
+    .参数 是否最终合并, 逻辑型
+    .局部变量 上个操作符, 文本型
+    .局部变量 上上个操作符, 文本型
+
+    .局部变量 左操作数, 整数型
+    .局部变量 右操作数, 整数型
+
+    
+    .判断循环首 (真)
+        标准输出 (, “准备合并, 当前操作数|操作符栈长度 ” + 到文本 (取数组成员数 (操作符栈)) + “ | ” + 到文本 (取数组成员数 (操作数栈)) + #换行符)
+        
+        .判断开始 (取数组成员数 (操作符栈) ≥ 2)
+            上个操作符 = 弹出_文本 (操作符栈)
+            上上个操作符 = 弹出_文本 (操作符栈)
+            .如果真 (是否最终合并)
+                交换变量 (上个操作符, 上上个操作符)
+            .如果真结束
+            
+        .判断 (取数组成员数 (操作符栈) ≥ 1 且 取数组成员数 (操作数栈) ≥ 2)
+            上个操作符 = “$”
+            上上个操作符 = 弹出_文本 (操作符栈)
+        .默认
+            跳出循环 ()
+        .判断结束
+        
+        .如果 (取算符优先级 (上上个操作符) ≤ 取算符优先级 (上个操作符) 或 是否最终合并)
+            右操作数 = 弹出_整数 (操作数栈)
+            左操作数 = 弹出_整数 (操作数栈)
+            
+            加入成员 (操作数栈, 二元运算 (左操作数, 右操作数, 上上个操作符))
+            .如果真 (上个操作符 ≠ “$”)
+                加入成员 (操作符栈, 上个操作符)
+            .如果真结束
+            
+        .否则
+            加入成员 (操作符栈, 上上个操作符)
+            .如果真 (上个操作符 ≠ “$”)
+                加入成员 (操作符栈, 上个操作符)
+            .如果真结束
+            跳出循环 ()
+        .如果结束
+        
+    .判断循环尾 ()
+
+.子程序 取算符优先级, 整数型, 公开
+    .参数 算符, 文本型
+
+    ' 易语言的哈希表比较麻烦
+    
+    .如果真 (算符 = “*” 或 算符 = “/”)
+        返回 (1)
+    .如果真结束
+    
+    .如果真 (算符 = “+” 或 算符 = “-”)
+        返回 (2)
+    .如果真结束
+    
+    .如果真 (算符 = “$”)
+        返回 (9999) ' 终止符号
+    .如果真结束
+    
+    返回 (9999)
+    
+
+.子程序 弹出_整数, 整数型
+    .参数 变量, 整数型, 数组
+    .局部变量 最后一个, 整数型
+
+    ' 怎么搞一个泛型出来?
+    
+    最后一个 = 变量 [取数组成员数 (变量)]
+    删除成员 (变量, 取数组成员数 (变量), )
+    返回 (最后一个)
+    
+
+.子程序 弹出_文本, 文本型
+    .参数 变量, 文本型, 数组
+    .局部变量 最后一个, 文本型
+
+    ' 怎么搞一个泛型出来?
+    
+    最后一个 = 变量 [取数组成员数 (变量)]
+    删除成员 (变量, 取数组成员数 (变量), )
+    返回 (最后一个)
+
+.子程序 二元运算, 整数型
+    .参数 左, 整数型
+    .参数 右, 整数型
+    .参数 符号, 文本型
+    .局部变量 结果, 整数型
+
+    
+    .判断开始 (符号 = “+”)
+        结果 = 左 + 右
+    .判断 (符号 = “-”)
+        结果 = 左 - 右
+    .判断 (符号 = “*”)
+        结果 = 左 × 右
+    .判断 (符号 = “/”)
+        结果 = 左 ÷ 右
+    .默认
+        
+    .判断结束
+    返回 (结果)
+    
+
+.子程序 包含, 逻辑型
+    .参数 数组, 文本型, 数组
+    .参数 元素, 文本型
+    .局部变量 i, 整数型
+
+    .计次循环首 (取数组成员数 (数组), i)
+        .如果真 (元素 = 数组 [i])
+            返回 (真)
+        .如果真结束
+        
+    .计次循环尾 ()
+    返回 (假)
+

+ 0 - 0
1. 四则运算/四则运算解析器.代码/图标.ico


+ 2 - 0
1. 四则运算/四则运算解析器.代码/常量.e.txt

@@ -0,0 +1,2 @@
+.版本 2
+

+ 22 - 0
1. 四则运算/四则运算解析器.代码/日志/信息.log

@@ -0,0 +1,22 @@
+2021-11-04 20:17:51 [信息] [ SectionCode::ParseLibInfo ]               开始解析【支持库】数据
+2021-11-04 20:17:51 [信息] [ SectionCode::ParseLibInfo ]               完成解析【支持库】数据
+2021-11-04 20:17:51 [信息] [ SectionCode::ParseClasses ]               开始解析【类/程序集】数据
+2021-11-04 20:17:51 [信息] [ SectionCode::ParseClasses ]               完成解析【类/程序集】数据
+2021-11-04 20:17:51 [信息] [ SectionCode::ParseStructs ]               开始解析【自定义】数据
+2021-11-04 20:17:51 [信息] [ SectionCode::ParseStructs ]               完成解析【自定义】数据
+2021-11-04 20:17:51 [信息] [ SectionCode::WriteTxtCode ]               开始写出文本代码
+2021-11-04 20:17:51 [信息] [ SectionCode::WriteTxtCode ]               正在创建代码目录 [目录] C:/Users/myuan/Desktop/elang/四则运算解析器.代码/代码
+2021-11-04 20:17:51 [信息] [ SectionCode::WriteTxtCode ]               开始写出【类/程序集】文本代码
+2021-11-04 20:17:51 [信息] [ SectionCode::WriteTxtCode_Class ]         正在写出【程序集】文本代码 [程序集] 程序集1
+2021-11-04 20:17:51 [信息] [ SectionCode::WriteTxtCode ]               开始写出【DLL】文本代码
+2021-11-04 20:17:51 [信息] [ SectionCode::WriteTxtCode ]               开始写出【全局变量】文本代码
+2021-11-04 20:17:51 [信息] [ SectionCode::WriteTxtCode ]               开始写出【自定义数据】文本代码
+2021-11-04 20:17:51 [信息] [ SectionCode::WriteTxtCode_Structs ]       开始写出【自定义】文本代码
+2021-11-04 20:17:51 [信息] [ SectionCode::WriteTxtCode_Structs ]       完成写出【自定义】文本代码
+2021-11-04 20:17:51 [信息] [ SectionCode::WriteTxtCode ]               开始写出【支持库】信息
+2021-11-04 20:17:51 [信息] [ SectionCode::WriteTxtCode ]               开始写出【图标】文件 [路径] C:/Users/myuan/Desktop/elang/四则运算解析器.代码/图标.ico
+2021-11-04 20:17:51 [信息] [ SectionCode::WriteTxtCode ]               完成写出文本代码
+2021-11-04 20:17:51 [信息] [ SectionCode::WriteClasses ]               开始写出【类/程序集】数据
+2021-11-04 20:17:51 [信息] [ SectionCode::WriteClasses ]               完成写出【类/程序集】数据
+2021-11-04 20:17:51 [信息] [ SectionCode::WriteStructs ]               开始写出【自定义】数据
+2021-11-04 20:17:51 [信息] [ SectionCode::WriteStructs ]               完成写出【自定义】数据

+ 0 - 0
1. 四则运算/四则运算解析器.代码/日志/错误.log


+ 7 - 0
1. 四则运算/四则运算解析器.代码/自定义类型.e.txt

@@ -0,0 +1,7 @@
+.版本 2
+
+.数据类型 四则运算栈, 公开
+    .成员 操作符栈, 文本型, , "1"
+    .成员 操作数栈, 整数型, , "1"
+    .成员 已食用文本, 文本型
+

+ 1 - 0
1. 四则运算/四则运算解析器.代码/资源/资源.desc.json

@@ -0,0 +1 @@
+{}

+ 14 - 0
1. 四则运算/四则运算解析器.代码/配置/支持库.config.json

@@ -0,0 +1,14 @@
+[
+    {
+        "CmdCount": 670,
+        "Guid": "d09f2340818511d396f6aaf844c7e325",
+        "Key": "krnln",
+        "MaxRefConstPos": 4,
+        "MaxRefObjectPos": 0,
+        "Name": "系统核心支持库",
+        "Version": {
+            "Major": 5,
+            "Minor": 7
+        }
+    }
+]

+ 3 - 0
1. 四则运算/四则运算解析器.代码/配置/易包.文件.config.json

@@ -0,0 +1,3 @@
+{
+    "FileNames": []
+}

+ 1 - 0
1. 四则运算/四则运算解析器.代码/配置/模块.初始化.config.json

@@ -0,0 +1 @@
+{}

+ 23 - 0
1. 四则运算/四则运算解析器.代码/配置/用户.config.json

@@ -0,0 +1,23 @@
+{
+    "Address": "",
+    "Author": "",
+    "BuilderVersion": {
+        "Major": 0,
+        "Minor": 0
+    },
+    "CompilePlugins": "",
+    "Copyright": "",
+    "Description": "",
+    "Email": "",
+    "ExportPublicClassMethod": false,
+    "FaxNumber": "",
+    "Homepage": "",
+    "Name": "",
+    "ReleaseVersion": {
+        "Major": 1,
+        "Minor": 0
+    },
+    "TelephoneNumber": "",
+    "WriteVersion": true,
+    "ZipCode": ""
+}

+ 13 - 0
1. 四则运算/四则运算解析器.代码/配置/系统.config.json

@@ -0,0 +1,13 @@
+{
+    "Lang": 1,
+    "ProjectType": 1,
+    "ProjectVersion": {
+        "Major": 1,
+        "Minor": 7
+    },
+    "Type": 1,
+    "Version": {
+        "Major": 5,
+        "Minor": 6
+    }
+}

+ 12 - 0
1. 四则运算/四则运算解析器.代码/项目.etprj

@@ -0,0 +1,12 @@
+{
+    "AsyncFile": false,
+    "E2TXT-EFile": "",
+    "E2TXT-InSourceDir": true,
+    "E2TXT-IsCreateE": true,
+    "Encoding": "UTF-8",
+    "Level": 9,
+    "NameStyle": 2,
+    "Password": "",
+    "ResetNames": [],
+    "Source": "../ËÄÔòÔËËã½âÎöÆ÷.e"
+}