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

栏目: 软件资讯 · 发布时间: 4年前

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

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

查看所有标签

猜你喜欢:

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

Kotlin实战

Kotlin实战

【美】Dmitry Jemerov(德米特里·詹莫瑞福)、【美】 Svetlana Isakova(斯维特拉娜·伊凡诺沃) / 覃宇、罗丽、李思阳、蒋扬海 / 电子工业出版社 / 2017-8 / 89.00

《Kotlin 实战》将从语言的基本特性开始,逐渐覆盖其更多的高级特性,尤其注重讲解如何将 Koltin 集成到已有 Java 工程实践及其背后的原理。本书分为两个部分。第一部分讲解如何开始使用 Kotlin 现有的库和API,包括基本语法、扩展函数和扩展属性、数据类和伴生对象、lambda 表达式,以及数据类型系统(着重讲解了可空性和集合的概念)。第二部分教你如何使用 Kotlin 构建自己的 ......一起来看看 《Kotlin实战》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

SHA 加密
SHA 加密

SHA 加密工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具