123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- .版本 2
- .支持库 RegEx
- .程序集 词法分析程序集
- .程序集变量 正则, 正则表达式
- .子程序 词法分析
- .参数 表达式, 文本型
- .参数 返回值, 词, 参考 数组
- .局部变量 上次结果位置, 整数型
- .局部变量 当前词, 词
- .局部变量 当前匹配文本, 文本型
- .局部变量 res, 搜索结果
- .局部变量 i, 整数型
- ' 可能带°的数字 (\d+)(\.\d+)*[°]{0,1}
- ' 标识符 [a-zA-ZΑ-Ωα-ω_][a-zA-ZΑ-Ωα-ω0-9_]*
- ' 算符 [\+\-\*\/\^]
- ' 括号 [\(\)]
- ' 注释 \#.+
- ' 逗号 ,
-
- ' 易语言的正则表达式没办法用\u, 也没办法写希腊字母, 也没办法写「°」, 因此去掉希腊字母和「°」, 加上空白, 合起来就是这样的
- .如果真 (正则.是否为空 ())
- 正则.创建 (“((\d+)(\.\d+)*)|([a-zA-Z_][a-zA-Z0-9_]*)|([\+\-\*\/\^])|([\(\)])|(\#.+)|([,])|[ ]+$”, )
- .如果真结束
-
- ' ________________m1______________ -> 数字
- ' ____________ m2___m3____________ -> 数字的整数和小数部分
- ' __________________________________________m4___________ -> 标识符 包含英文字母和希腊字母 只能以字母或下划线开头, 之后可以是数字或字母下划线
- ' _______________________________________________________________m5______ -> 算符, +-*/^
- ' __________________________________________________________________________m6___ -> 括号
- ' _________________________________________________________________________________m7___ -> 注释
- ' _______________________________________________________________________________________m8___ -> 逗号
-
- ' 调试输出 (正则.取子表达式个数 ())
-
- 清除数组 (返回值)
- 上次结果位置 = 1
-
- .判断循环首 (上次结果位置 ≤ 取文本长度 (表达式) 且 当前词.类型 ≠ -1)
- 当前词.内容 = “”
- 当前词.类型 = -1
- res = 正则.搜索 (表达式, 上次结果位置, )
-
- .计次循环首 (#词类型枚举数量, i)
- .如果真 (i = #词类_整数部分 或 i = #词类_小数部分)
- 到循环尾 ()
- .如果真结束
-
- 当前匹配文本 = res.取子匹配文本 (表达式, i, 上次结果位置)
-
- .如果真 (取文本长度 (当前匹配文本) > 0 且 i ≠ #词类_空格)
- 当前词.内容 = 当前匹配文本
- 当前词.类型 = i
- 上次结果位置 = 上次结果位置 + 取文本长度 (当前匹配文本) + 1
- 加入成员 (返回值, 当前词)
-
- 跳出循环 ()
- .如果真结束
-
- .计次循环尾 ()
-
-
- .判断循环尾 ()
-
-
- .子程序 输出词法分析结果
- .参数 词, 词, 数组
- .局部变量 i, 整数型
- .计次循环首 (取数组成员数 (词), i)
- 标准输出 (, “当前类型: ” + 到文本 (词 [i].类型) + “, 内容: ” + 词 [i].内容 + #换行符)
- .计次循环尾 ()
- 标准输出 (, “----” + #换行符)
-
- .子程序 词法分析并输出
- .参数 表达式, 文本型
- .局部变量 res, 词, , "0"
- .局部变量 t0, 长整数型
- t0 = 时间_取现行时间戳1 (真)
- 词法分析 (表达式, res)
- 标准输出 (, “用时 ” + 到文本 (时间_取现行时间戳1 (真) - t0) + “ms” + #换行符)
- 输出词法分析结果 (res)
-
|