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

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

内容简介:这几个星期继续重现由 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:源码生成支持更多函数、类相关语法》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

写给Web开发人员看的HTML5教程

写给Web开发人员看的HTML5教程

2012-3 / 45.00元

《写给Web开发人员看的HTML5教程》通过结合大量实际案例和源代码对HTML5的重要特性进行了详细讲解,内容全面丰富,易于理解。全书共分为12章,从HTML5的历史故事讲起,涉及了文档结构和语义、智能表单、视频与音频、画布、SVG与MathML、地理定位、Web存储与离线Web应用程序、WebSockets套接字、WebWorker多线程、微数据以及以拖曳为代表的一些全局属性,涵盖了HTML5所......一起来看看 《写给Web开发人员看的HTML5教程》 这本书的介绍吧!

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

各进制数互转换器

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

在线XML、JSON转换工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换