词法分析程序集.static.e.txt 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. .版本 2
  2. .支持库 RegEx
  3. .程序集 词法分析程序集
  4. .程序集变量 正则, 正则表达式
  5. .子程序 词法分析
  6. .参数 表达式, 文本型
  7. .参数 返回值, 词, 参考 数组
  8. .局部变量 上次结果位置, 整数型
  9. .局部变量 当前词, 词
  10. .局部变量 当前匹配文本, 文本型
  11. .局部变量 res, 搜索结果
  12. .局部变量 i, 整数型
  13. ' 可能带°的数字 (\d+)(\.\d+)*[°]{0,1}
  14. ' 标识符 [a-zA-ZΑ-Ωα-ω_][a-zA-ZΑ-Ωα-ω0-9_]*
  15. ' 算符 [\+\-\*\/\^]
  16. ' 括号 [\(\)]
  17. ' 注释 \#.+
  18. ' 逗号 ,
  19. ' 易语言的正则表达式没办法用\u, 也没办法写希腊字母, 也没办法写「°」, 因此去掉希腊字母和「°」, 加上空白, 合起来就是这样的
  20. .如果真 (正则.是否为空 ())
  21. 正则.创建 (“((\d+)(\.\d+)*)|([a-zA-Z_][a-zA-Z0-9_]*)|([\+\-\*\/\^])|([\(\)])|(\#.+)|([,])|[ ]+$”, )
  22. .如果真结束
  23. ' ________________m1______________ -> 数字
  24. ' ____________ m2___m3____________ -> 数字的整数和小数部分
  25. ' __________________________________________m4___________ -> 标识符 包含英文字母和希腊字母 只能以字母或下划线开头, 之后可以是数字或字母下划线
  26. ' _______________________________________________________________m5______ -> 算符, +-*/^
  27. ' __________________________________________________________________________m6___ -> 括号
  28. ' _________________________________________________________________________________m7___ -> 注释
  29. ' _______________________________________________________________________________________m8___ -> 逗号
  30. ' 调试输出 (正则.取子表达式个数 ())
  31. 清除数组 (返回值)
  32. 上次结果位置 = 1
  33. .判断循环首 (上次结果位置 ≤ 取文本长度 (表达式) 且 当前词.类型 ≠ -1)
  34. 当前词.内容 = “”
  35. 当前词.类型 = -1
  36. res = 正则.搜索 (表达式, 上次结果位置, )
  37. .计次循环首 (#词类型枚举数量, i)
  38. .如果真 (i = #词类_整数部分 或 i = #词类_小数部分)
  39. 到循环尾 ()
  40. .如果真结束
  41. 当前匹配文本 = res.取子匹配文本 (表达式, i, 上次结果位置)
  42. .如果真 (取文本长度 (当前匹配文本) > 0 且 i ≠ #词类_空格)
  43. 当前词.内容 = 当前匹配文本
  44. 当前词.类型 = i
  45. 上次结果位置 = 上次结果位置 + 取文本长度 (当前匹配文本) + 1
  46. 加入成员 (返回值, 当前词)
  47. 跳出循环 ()
  48. .如果真结束
  49. .计次循环尾 ()
  50. .判断循环尾 ()
  51. .子程序 输出词法分析结果
  52. .参数 词, 词, 数组
  53. .局部变量 i, 整数型
  54. .计次循环首 (取数组成员数 (词), i)
  55. 标准输出 (, “当前类型: ” + 到文本 (词 [i].类型) + “, 内容: ” + 词 [i].内容 + #换行符)
  56. .计次循环尾 ()
  57. 标准输出 (, “----” + #换行符)
  58. .子程序 词法分析并输出
  59. .参数 表达式, 文本型
  60. .局部变量 res, 词, , "0"
  61. .局部变量 t0, 长整数型
  62. t0 = 时间_取现行时间戳1 (真)
  63. 词法分析 (表达式, res)
  64. 标准输出 (, “用时 ” + 到文本 (时间_取现行时间戳1 (真) - t0) + “ms” + #换行符)
  65. 输出词法分析结果 (res)