木兰语言 0.0.17.1:源码生成支持更多函数、类相关语法

栏目: 软件资讯 · 发布时间: 2周前

来源: 开源中国社区

内容简介:这几个星期继续重现由 Python 语法树生成木兰源码的功能(0.0.17.1 已发布在 PyPI,可通过 pip install ulang 安装): 单参数、多参数、带默认值参数函数定义 类、类方法、构造方法、嵌套类、扩展类 引用属性、类...

本文转载自:https://www.oschina.net/news/138446/ulang-0-0-17-1-released,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有。

这几个星期继续重现由 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,:57
      • setup.py, 34
      • 测试/unittest/交互.py,交互环境相关测试:28
      • 测试/unittest/所有用例.py:24

以上所述就是小编给大家介绍的《木兰语言 0.0.17.1:源码生成支持更多函数、类相关语法》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

关注码农网公众号

关注我们,获取更多IT资讯^_^


查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

搜

(美)约翰·巴特利 / 张岩、魏平 / 中信出版社 / 2006-1 / 35.00元

这个世界需要什么?如何任何一家公司能回答好这个问题,它就掌握了控制商业社会,乃至整个人类文明的万能钥匙。在过去的几年中,Google正在为获得这把钥匙而努力。虽然Google并非搜索业务的最早开发者,但它凭借着简明、便利、实用的搜索技术和理念,逐渐击败雅虎、Alta Vista等搜索领域的先锋,成为搜索行业名副其实的王者。 本书描述了Google如何从斯坦福一个不起眼的公司迅速崛起为“......一起来看看 《搜》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

在线进制转换器
在线进制转换器

各进制数互转换器

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具