木兰编程语言 0.0.14.4:中文报错信息规整,枚举新发现

安装方法:pip install ulang,使用方法与例程请见 pypi 项目首页(源于码云首页)。注意:必需 python 3.7

木兰原始可执行文件的报错信息非常简单,并不包含出错位置和调用层级信息:

>ulang-0.2.2.exe 测试错误处理引用模块.ul
IndexError: list index out of range 

这在交互环境或者源码文件单一很短时还可接受,但开发更长代码或者多文件项目时就使得排错十分困难。四个月前添加了一些中文报错信息,本周在对井字棋游戏进行重构时,发现多文件互相引用时未显示层级调用信息,颇为不便,于是进行了修正。现在的报错行为举例如下:

1 报错信息

交互环境中仅提示出错所在位置简要信息:

> func a(n) { return n1+1 }
> func b(n) { print(n) }
> b(a(2))
  请先定义'n1'再使用, 见第1行 

运行源码时,可见调用各层的详细信息:

$ 木兰 测试/错误处理/未定义变量于多层函数.ul
  请先定义'数1'再使用
见第2行:return 数1 + 1
调用层级如下
见第7行:输出(加(2)) 

如果错误发生在其他文件,可见文件名:

$ 木兰 测试/错误处理/引用模块.ul
  取列表内容时,索引超出范围
“测试/错误处理/下标越界函数.ul”第2行:print([][0])
调用层级如下
见第3行:a() 

如果某被引用的模块加载出错,现在只能提示问题模块,今后将尝试加上该模块的具体问题和定位信息,另外还有个相关问题:

$ 木兰 测试/错误处理/引用问题模块.ul
  No module named '测试'
调用层级如下
见第1行:using * in 测试.错误处理.无此变量 

如果错误可以定位到列,则也用醒目符号提示出错位置,木兰源码的层级调用信息将在之后版本清除:

$ 木兰 测试/错误处理/中文对齐.ul
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.7/bin/木兰", line 10, in 
    sys.exit(中())
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/木兰/中.py", line 54, in 中
    节点 = 分析器.分析(源码, 源码文件)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/木兰/分析器/语法分析器.py", line 972, in 分析
    节点 = self.分析器.parse(各词, state=self)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/木兰/分析器/rply_parser.py", line 92, in parse
    self.error_handler(state, lookahead)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/木兰/分析器/语法分析器.py", line 933, in error_handler
    源码=self.源码)
木兰.分析器.错误.语法错误: 文件 "测试/错误处理/中文对齐.ul", 第1行, 第12列, 没认出这个词 "by"
print("铛铛" ✋by 2) 

如果有大括号未匹配,会报 $end 错误于文件末尾,希望今后参考其他编译器进行改进:

$ 木兰 测试/错误处理/括号不匹配.ul
【前略】
木兰.分析器.错误.语法错误: 文件 "测试/错误处理/括号不匹配.ul", 第6行, 第2列, 没认出这个词 "$end"
*✋/ 

2 其他

2.1 问题还是本意:枚举值在不同模块中不相等

在重构井字棋的过程中发现,在 e 模块定义的 T 枚举类型有 X、O 两项,在 a 模块中赋值 aa 为 T.X,在 b 模块中判断 aa == T.X,结果返回 false。

现在规避的方法是在 a 模块中加一个接口用来判断 aa == T.X,来避免 b 模块对 T 的依赖。

尚需细究根源。详见此 issue“多处调用枚举时值不相等”

2.2 命令添加了取版本信息选项“--版本”:

$ 木兰 --版本
0.0.14.4
$ 木兰 -版
0.0.14.4 

下一步

继续对自带的木兰代码编辑器进行重构和改进,以尽早投入使用。


附录:代码量统计

主要部分的代码行数统计,格式为:上次->现在。


展开阅读全文

页面更新:2024-03-13

标签:木兰   分析器   规整   层级   信息   括号   中文   语法   源码   模块   定义   错误   版本   代码   环境   文件   测试   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top