木兰编程语言重现——功能初具雏形,添加中文报错信息
自原型搭建已过去两个多月 , 现在实现了木兰编程语言一些基本的功能 。 正值项目代码搬家到 OSChina , 作一阶段小结 。
功能(以下示例都选自测试用例)
调用现有 Python 库如草蟒:
文章插图
using * in 海龟颜色("黄色", "红色")开始填充()for 拐数 in 0..4 {前进(200)右转(144)}结束填充()主循环()
类型:
type Animal {func getName() {return 1}}type Person : Animal {{}}print(Person.getName())
函数:
func increment(step) {func add(n) {return n + step}return add}print(increment(10)(1))
流程控制:
print(false ? 2 : 1)sum = 0number = 1while number < 4 {sum = sum + numbernumber = number + 1}print(sum)
中文报错信息上述基本功能之外 , 对部分报错信息进行了加工 , 使之更易懂好读 。
比如下面的死递归:
func f() {f()}f()
运行报错信息如下:
(..??_??..) 递归过深 。 请确认: 1、的确需要递归 2、递归的收敛正确见第2行:f()调用层级如下第2行:f()【中略 995 行】第2行:f()第4行:f()
又如此段代码:
func add(number) {return number1+1}func output(number) {print(number)}output(add(2))
运行报错如下:
(..??_??..) 请先定义'number1'再使用见第2行:return number1+1调用层级如下第7行:output(add(2))
语法分析的错误信息亦然 。 比如现在尚不支持空行 , 于是下面的代码:
print(2)
会报错如下:
错误.语法错误: 文件 "测试/错误处理/空行.ul", 第1行, 第1列, 没认出这个词 "换行"^
代码统计由于实现机制是将源码转换为 Python 的抽象语法树(AST)后调用 exec 执行 , 因此主要代码量在词法分析器和语法分析器(包括 AST 转换) 。 下面是几个主要部分的代码量统计(使用 scc , 包括空行和注释 , 木兰的.ul代码统计使用--count-as ul:javascript参数)
- 测试
- 木兰测试用例:465
- 测试.py , 运行测试的脚本:123
- test语法树.py , 确保生成的语法树与原始版本一致:52
- 实现:1287
- (语法)分析器.py , 包括 AST 转换:569
- 语法树.py , 功用/语法树处理.py , 包括对 ast 库的中文封装:214
- 词法分析器.py , 主要是词法规则:110
- 中.py , 主程序:56
- 功用/反馈信息.py , 报错信息中文化:43
- 环境.py , 全局变量:30
- 盘点:2020年5种流行的 AI 编程语言,就业高薪不是梦
- 零基础学习编程语言将面临哪几道门槛,以及该如何解决
- Rust的不足之处,让它无法成为一门成熟的编程语言
- 如何学好一门计算机编程语言?
- 在学习编程语言之前,可以先学习哪些知识
- 2020年及以后的10种最受欢迎的编程语言
- 一些大型网站使用的编程语言与数据库
- 在读大学生是否该重点学习一门编程语言,以及该如何选择编程语言
- 这个调查显示 Go 竟然是 2020 年最受欢迎的编程语言
- 那些主流编程语言的知识,C语言