语法分析程序集.static.e.txt 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. .版本 2
  2. .支持库 spec
  3. .程序集 语法分析程序集
  4. .程序集变量 AST根, 抽象语法树节点
  5. .程序集变量 词, 词, , "0"
  6. .程序集变量 当前词游标, 整数型
  7. .子程序 语法分析
  8. .参数 _词, 词, 数组
  9. 复制数组 (词, _词)
  10. 当前词游标 = 1
  11. AST根.初始化内存 (“根”)
  12. .判断循环首 (当前词游标 < 取数组成员数 (词))
  13. 匹配表达式 ()
  14. .判断循环尾 ()
  15. .子程序 匹配表达式
  16. .局部变量 节点, 抽象语法树节点
  17. .如果真 (下个词 ().类型 = #词类_数字)
  18. 调试输出 (“遇到数字”, 下个词 ().内容)
  19. 节点.初始化内存 (“遇到数字 ” + 下个词 ().内容)
  20. AST根.添加参数节点 (节点)
  21. .如果真结束
  22. 词游标自增 ()
  23. .子程序 下个词, 词
  24. .局部变量 返回词, 词
  25. .如果 (当前词游标 > 取数组成员数 (词))
  26. 返回词.内容 = “”
  27. 返回词.类型 = #词类_结尾
  28. .否则
  29. 返回词 = 词 [当前词游标]
  30. .如果结束
  31. 返回 (返回词)
  32. .子程序 词游标自增
  33. 当前词游标 = 当前词游标 + 1
  34. .子程序 重复文本, 文本型
  35. .参数 n, 整数型
  36. .参数 s, 文本型
  37. .局部变量 res, 文本型
  38. res = “”
  39. .计次循环首 (n, )
  40. res = res + s
  41. .计次循环尾 ()
  42. 返回 (res)
  43. .子程序 输出语法分析结果
  44. .参数 AST, 抽象语法树节点
  45. .参数 当前层级, 整数型, 可空
  46. .局部变量 i, 整数型
  47. .如果真 (是否为空 (当前层级))
  48. 当前层级 = 0
  49. .如果真结束
  50. 标准输出 (, 重复文本 (当前层级, “ ”))
  51. 标准输出 (, AST.生成展示文本 () + #换行符)
  52. .计次循环首 (AST.获取参数数量 (), i)
  53. 输出语法分析结果 (AST.获取参数节点 (i), 当前层级 + 1)
  54. .计次循环尾 ()
  55. .子程序 语法分析并输出
  56. .参数 表达式, 文本型
  57. .局部变量 t0, 长整数型
  58. t0 = 时间_取现行时间戳1 (真)
  59. 词法分析 (表达式, 词)
  60. 语法分析 (词)
  61. 标准输出 (, “用时 ” + 到文本 (时间_取现行时间戳1 (真) - t0) + “ms” + #换行符)
  62. 输出语法分析结果 (AST根)