@@ -2,7 +2,8 @@
.程序集 程序集1
.子程序 _启动子程序, 整数型, , 本子程序在程序启动后最先执行
- 语法分析并输出 (“sin(x, y, z)”)
+ 语法分析并输出 (“sin(x, y, f(g(h(z))))”)
+ 语法分析并输出 (“f(x) = 2”)
.判断循环首 (真)
@@ -20,10 +20,10 @@
' 括号 [\(\)]
' 注释 \#.+
' 逗号 ,
-
+ ' 等号 =
' 易语言的正则表达式没办法用\u, 也没办法写希腊字母, 也没办法写「°」, 因此去掉希腊字母和「°」, 加上空白, 合起来就是这样的
.如果真 (正则.是否为空 ())
- 正则.创建 (“((\d+)(\.\d+)*)|([a-zA-Z_][a-zA-Z0-9_]*)|([\+\-\*\/\^])|([\(\)])|(\#.+)|([,])|[ ]+$”, )
+ 正则.创建 (“((\d+)(\.\d+)*)|([a-zA-Z_][a-zA-Z0-9_]*)|([\+\-\*\/\^])|([\(\)])|(\#.+)|([,])|(==)|(=)|[ ]+$”, )
.如果真结束
' ________________m1______________ -> 数字
@@ -67,6 +67,19 @@
+.子程序 词存在, 逻辑型
+ .参数 词, 词, 数组
+ .参数 类型, 整数型, , #词类枚举
+ .局部变量 i, 整数型
+
+ .计次循环首 (取数组成员数 (词), i)
+ .如果真 (词 [i].类型 = 类型)
+ 返回 (真)
+ .如果真结束
+ .计次循环尾 ()
+ 返回 (假)
.子程序 输出词法分析结果
.参数 词, 词, 数组
.局部变量 i, 整数型, 数组
@@ -17,7 +17,7 @@
AST根.初始化内存 (“根”)
.判断循环首 (当前词游标 ≤ 取数组成员数 (词))
- res = 匹配表达式 (AST根)
+ res = 匹配语句 (AST根)
调试输出 (“匹配表达式 结束”, res.生成展示文本 ())
.如果 (res.失败 ())
@@ -29,6 +29,58 @@
.判断循环尾 ()
+.子程序 匹配语句, 抽象语法树节点
+ .参数 父节点, 抽象语法树节点
+ .局部变量 当前节点, 抽象语法树节点
+ .局部变量 函数定义, 抽象语法树节点
+ .局部变量 表达式, 抽象语法树节点
+ 当前节点.初始化内存 (“匹配语句 之起始”, )
+ 调试输出 (“当前父节点”, 父节点.获取函数名 ())
+ .如果 (词存在 (词, #词类_单等号))
+ ' 这是个赋值语句
+ 函数定义 = 匹配函数定义 (当前节点)
+ .如果真 (函数定义.失败 ())
+ 返回 (父节点.生成匹配失败节点 ())
+ 返回 (函数定义)
+ .否则
+ 表达式 = 匹配表达式 (当前节点)
+ .如果真 (表达式.失败 ())
+ 返回 (表达式)
+ .如果结束
+.子程序 匹配函数定义, 抽象语法树节点
+ .局部变量 函数, 抽象语法树节点
+ .局部变量 等号, 抽象语法树节点
+ 函数 = 匹配函数 (父节点)
+ .如果真 (函数.失败 ())
+ 等号 = 通用词匹配 (#词类_单等号)
+ .如果真 (等号.失败 ())
+ 表达式 = 匹配表达式 (父节点)
+ 等号.添加参数节点 (函数)
+ 等号.添加参数节点 (表达式)
+ 返回 (等号)
.子程序 匹配表达式, 抽象语法树节点
.参数 父节点, 抽象语法树节点
.局部变量 l, 抽象语法树节点, 数组
@@ -309,6 +361,22 @@
.如果结束
+.子程序 通用词匹配, 抽象语法树节点
+ .参数 词类型, 整数型, , #词类枚举
+ .局部变量 当前节点, 抽象语法树节点, 数组
+ 当前节点.初始化内存 ()
+ .如果 (下个词 ().类型 ≠ 词类型)
+ 当前节点.释放结构内存 ()
+ 返回 (当前节点.生成匹配失败节点 ())
+ 当前节点.设置函数名 (下个词 ().内容)
+ 词游标自增 ()
+ 返回 (当前节点)
.子程序 下个词, 词
.局部变量 返回词, 词, 数组
@@ -9,8 +9,10 @@
.常量 词类_括号, "6"
.常量 词类_注释, "7"
.常量 词类_逗号, "8"
-.常量 词类_空格, "9"
-.常量 词类型枚举数量, "9"
+.常量 词类_双等号, "9"
+.常量 词类_单等号, "10"
+.常量 词类_空格, "11"
+.常量 词类型枚举数量, "11"
.常量 词类_结尾, "99999"
@@ -1,5 +1,6 @@
{
"AsyncFile": false,
+ "Dest": "",
"E2TXT-EFile": "",
"E2TXT-InSourceDir": true,
"E2TXT-IsCreateE": true,
@@ -8,5 +9,8 @@
"NameStyle": 2,
"Password": "",
"ResetNames": [],
- "Source": "../简单的数值语言及其虚拟机.e"
+ "Source": "../简单的数值语言及其虚拟机.e",
+ "TXT2E-CreateLog": true,
+ "TXT2E-EFile": "代码.e",
+ "TXT2E-InSourceDir": true
}