内容简介:这几个星期继续重现由 Python 语法树生成木兰源码的功能(0.0.17.1 已发布在 PyPI,可通过 pip install ulang 安装): 单参数、多参数、带默认值参数函数定义 类、类方法、构造方法、嵌套类、扩展类 引用属性、类...
这几个星期继续重现由 Python 语法树生成木兰源码的功能(0.0.17.1 已发布在 PyPI,可通过 pip install ulang 安装):
- 单参数、多参数、带默认值参数函数定义
- 类、类方法、构造方法、嵌套类、扩展类
- 引用属性、类方法
如下 Python 代码:
class C1:
class C2:
def __init__(self):
print(2)
def __init__(self):
print(1)
C1()
C1.C2()
可生成木兰源码:
type C1 {
type C2 {
func $C2() {
println(2)
}
}
func __init__(self) {
println(1)
}
}
C1()
C1.C2()
期间发现了一些费解之处。比如上面的第二个 __init__,为何不转换为 $C1 呢?
还有更明显的问题,比如对变长指名参数:
def a(**kwargs):
print(kwargs)
a(k1="v1", k2="v2")
原始木兰可执行文件 转换时就会报错:
TypeError: can only concatenate str (not "arg") to str
又如属性方法:
class C:
@property
def m(self):
print(0)
@m.setter
def m(self, value):
print(1)
转换时也会报错:
NameError: name 'decorator_list' is not defined
这些问题都已在重现项目中原样复现,原因写在源码注释中。
综上,至此个人感觉此部分由 Python 生成木兰源码的功能的打磨程度不及语法解析部分。也许是因为此功能当时尚未在学校教学中大规模应用。
另外,为调试方便,添加了新命令行选项“--语法树”,用于显示源码的对应语法树。
附:代码量统计
主要部分的代码行数统计,格式为:上次->现在。
- 木兰代码量,提取儿歌部分代码到 此单独项目 3324 -> 3050
- 运行环境,实现与测试大部为木兰代码:582
- 木兰测试用例,包括部分实用小程序(如井字棋):2742 -> 2468 (报错信息测试用例替代了源码中的注释)
- Python 代码量(木兰实现与测试框架):2934 -> 3381
生成/木兰.py:206功用/反馈信息.py:81 -> 175环境.py,定义全局方法: 174 -> 175中.py,主程序:74 -> 95分析器/错误.py:26 -> 28- 未变
分析器/语法分析器.py:1049分析器/语法树.py:225分析器/词法分析器.py:216交互.py,交互环境(REPL):148测试/期望值表.py:144测试/unittest/报错.py:124分析器/语法树处理.py:91分析器/语法成分.py,从语法分析器中提取出来的枚举常量:85测试/运行所有.py,检验所有木兰测试代码片段:71测试/unittest/生成.py,语法树生成木兰源码相关测试:60测试/unittest/语法树.py,确保生成的语法树与原始版本一致,拆分报错部分:58功用/调试辅助.py,:57setup.py, 34测试/unittest/交互.py,交互环境相关测试:28测试/unittest/所有用例.py:24
以上所述就是小编给大家介绍的《木兰语言 0.0.17.1:源码生成支持更多函数、类相关语法》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Professional JavaScript for Web Developers
Nicholas C. Zakas / Wrox / 2009-1-14 / USD 49.99
This eagerly anticipated update to the breakout book on JavaScript offers you an in-depth look at the numerous advances to the techniques and technology of the JavaScript language. You'll see why Java......一起来看看 《Professional JavaScript for Web Developers》 这本书的介绍吧!
随机密码生成器
多种字符组合密码
UNIX 时间戳转换
UNIX 时间戳转换
