st语言编程手册_木兰编程语言 0.0.14.7:功能覆盖初版用户手册

木兰编程语言 在 2020 年度 OSC 中国开源项目评选 中已获得 26 票,请投票支持!(请戳文末链接)

年初对原始木兰可执行文件 ulang-0.2.2.exe 作了些功能上的摸索尝试,将基本功能写在初版用户手册。开展重现项目之后,一直没重走一遍手册中的例程。上周终于完成了这个综合各部分功能的”小测验“,大部分例程在上一版本就能正确运行,余下的小部分在这个版本中也通过了。

【安装:pip install ulang,用法与例程请见 PyPI。源码位于开源中国。 注意:必需 python 3.7,源码文件需 UTF-8 编码

此版本重现功能

字符串转义

比较特别的是反斜杠(木兰交互环境下效果):

> 'c'+'name'came 

在 Python 中反斜杠如果未配对,会报语法错误:

>>> print('')  File "", line 1    print('')             ^SyntaxError: EOL while scanning string literal>>> print('')  File "", line 1    print('')               ^SyntaxError: EOL while scanning string literal

配对后 Python 的效果:

>>> print('')>>> print('') 

比照木兰中反斜杠转义效果:

> println('')> println('')> println('')> println('')> println('')> println('')

实现细节可见源码,个人感觉初用有些别扭,这种使用场景应该不多。

另外引号与换行转义无需多言:

> 'doesn't'doesn't> ""吃了么?"""吃了么?"> '第一行第二行'第一行第二行 

函数参数指定类型

> type Person {>>   func $Person(name) {>>     $name = name>>   }>> }> func hello(p : Person) {>> println("hi " + p.name)>> }> hello(Person("木兰"))hi 木兰 

当前路径下 Python 模块导入

比如当前路径下有 larger.py:

def larger(a, b):    if a > b:        print(a)    else:        print(b)

木兰交互环境下:

> using larger> larger.larger(5,6)6 

内置 enumerate 函数

可以更方便地定义枚举了:

> for i, v in enumerate(['小', '中', '大']) { println(i, v) }0 小1 中2 大

求余运算

> 11%32 

其他

Gitee Go 流水线

惊喜发现 Gitee Go 开通后获赠了 1000 分钟构建时间,而且非常幸运,构建环境的 Python 版本正好支持本项目需要的 3.7。在新手模板基础上作了一点修改,较顺利地添加了一个费时少又较关键的 unittest 测试集(确认语法树生成正确),挂件看起来不错:

aa2173f6b6f73a4ed54fb9cde6b4d1ce.png

触发后好像需要一点时间等待分配构建资源,感觉等待挺短,也许是尚未有很多用户设置了流水线?期间只发现了一个日志中的中文显示问题,已提交报告给官方,期待早日解决~

webpy 尚无法使用

由于 web.py 的例程需要调用 globals():

web.application(urls, globals())

而尚未找到 globals() 在木兰中的对应方法,因而暂时无法使用。希望找到一个合用、轻量级的网络服务框架,欢迎建议。

更多报错信息中文化

> using  不存在   没找到模块:‘不存在’,见第1行

附:代码量统计

主要部分的代码行数统计,格式为:上次->现在。

  • 木兰代码量 2920 -> 2965
    • 编辑器,实现与测试都是木兰代码:432 (在为分为前后端实现调研网络服务框架)
    • 木兰测试用例,包括部分实用小程序(如井字棋):2488 -> 2533
  • Python 代码量(木兰实现与测试框架):2574 -> 2594
    • 分析器/语法分析器.py:1002 -> 1008
    • 分析器/词法分析器.py:201 -> 204
    • 测试/运行所有.py,检验所有木兰测试代码片段:191 -> 192
    • 环境.py,定义全局方法:162 -> 171
    • 未变
      • 分析器/语法树.py:202
      • 交互.py,交互环境(REPL):138
      • 分析器/语法成分.py,从语法分析器中提取出来的枚举常量:81
      • 中.py,主程序:74
      • 功用/反馈信息.py:65
      • 功用/调试辅助.py,:57
      • setup.py, 34
      • 分析器/错误.py:17
      • 测试/unittest/语法树.py,确保生成的语法树与原始版本一致:67
      • 测试/unittest/交互.py,交互环境相关测试:28
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SELECT DISTINCT c.ID AS id, c.NAME AS contName, c.CONTRACT_NO AS contractNo, c.INSTANCE_ID AS instanceId, c.UNDERTAKE_DEPT_ID AS remindDeptId, c.UNDERTAKE_DEPT_NAME AS sendDeptName, c.CREATE_USER_ID, c.CREATE_USER_NAME AS contractOpteraterName, c.PLAN_STATE AS planState, c.PLAN_STATE_NAME AS planStateName, aw.INSTANCE_ID AS inId, aw.CREATE_TIME AS sendTime FROM ( SELECT c.* FROM ( SELECT c.* FROM ( SELECT c.ORIGINAL_CONTRACT_ID, MAX(CREATE_TIME) CREATE_TIME FROM CONTRACT_DRAFT.C_CONTRACT_INFO c WHERE c.ORIGINAL_CONTRACT_ID IS NOT NULL AND c.ORIGINAL_CONTRACT_ID != '' GROUP BY c.ORIGINAL_CONTRACT_ID ) t LEFT JOIN CONTRACT_DRAFT.C_CONTRACT_INFO c ON t.ORIGINAL_CONTRACT_ID = c.ORIGINAL_CONTRACT_ID AND t.CREATE_TIME = c.CREATE_TIME UNION ALL SELECT c.* FROM CONTRACT_DRAFT.C_CONTRACT_INFO c WHERE ( c.ORIGINAL_CONTRACT_ID IS NULL OR c.ORIGINAL_CONTRACT_ID = '' ) AND c.ID NOT IN ( SELECT c.ORIGINAL_CONTRACT_ID FROM CONTRACT_DRAFT.C_CONTRACT_INFO c WHERE c.ORIGINAL_CONTRACT_ID IS NOT NULL AND c.ORIGINAL_CONTRACT_ID != '')) c WHERE c.deleted_flag = 0 AND c.BELONG = 1 AND sysdate > c.end_date AND c.plan_state IN (4100, 4110, 4120, 4200, 4210, 4220, 5100, 5110, 5120) ) c INNER JOIN (SELECT INSTANCE_ID,create_time,state FROM CONTRACT_DRAFT.C_ACTIVITY_WORKITEMS WHERE state = 'Waiting') aw ON c.INSTANCE_ID = aw.INSTANCE_ID LEFT JOIN (SELECT deleted_flag,CONT_ID FROM CONTRACT_DRAFT.C_GET_PAY_PLAN WHERE deleted_flag = 0 ) g ON c.ID = g.CONT_ID LEFT JOIN CONTRACT_DRAFT.C_OUR_ENTITY_INFO oe ON c.OUR_ENTITY_ID = oe.ID AND oe.DELETED_FLAG = 0 ORDER BY aw.CREATE_TIME DESC 优化
07-08

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值