木兰语言 0.0.17.4 发现依赖库风险、不支持 in;发布 Gitee Reward 首批悬赏任务

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

内容简介:首先号外,刚在 Gitee Reward 发布了首批三个总值 ¥916 的悬赏任务,走过路过莫错过: ¥100 【新人优先】重现一个内置函数——bytes ¥128 【进阶】补完余下三十多个内置函数 ¥688 【老手】木兰源码转换为 Py...

首先号外,刚在 Gitee Reward 发布了首批三个总值 ¥916 的悬赏任务,走过路过莫错过:

依赖库风险

不知从何时开始,运行原始木兰的 逆向项目 时,就会报 rply 警告 ParserGeneratorWarning: Token '|=' is unused 而且任何求值都报错 “IndexError: list index out of range”。

一直没细究,本周才发现是因为木兰语法中的 “|” (位或)操作符在 rply 0.7.8 中成为了保留字,详见此 issue,就是在今年一月 rply 发布了 0.7.8 后就有此问题。

具体说,木兰逆向中有 @pg_.production('bin_expr : expr | expr') 这一语法规则,也就是表达式的位或运算,而在 rply 0.7.8 中包含了 这个 PR,将 | 作为语法规则的“或者”,也即 BNF 中 | 的原始语义。导致木兰的位或语法规则不能再识别。

为此问题 跟帖 尚未得到社区回应,想得到几种解决方案:

  • 限定用户安装 0.7.7 版本的 rply
  • 向 rply 提 PR,通过转义等方法使语法规则重新支持 | 字符
  • 另开 rply 分支并自行发布版本,可以回退问题 PR

限定 rply 版本的问题是,0.7.7 并没有这个错误定位信息的修正,影响调试和试用,如果两个 rply 版本在本机共存的话会增加开发测试的复杂度。

从之前的几次交流看,感觉 rply 社区已不大活跃,也许该早日考虑自行维护发布版本。

__contains__ 代替 in

去年挺早时候 就发觉木兰不支持 Python 中的 in 关键词,一直没发现比 __contains__ 更通用的变通办法,但还未死心。本周在重现 ast 生成木兰的这部分功能时,发现 Python 的 'a' in d 会被转换为木兰的 (d.__contains__('a')),原可执行文件也确认了。看来在这个版本中,木兰并无更好的 in 替代语法。可惜!

类似地,Python 中的链式比较比如 'a' in 'ab' in d,会转换为木兰的“且”表达式 ('ab'.__contains__('a') and d.__contains__('ab'))。个人感觉这个 Python 的链式语法并不像 in 那样常用,易用性问题似乎没那么大。

最后,还请各位看看 Gitee Reward 悬赏榜,麻烦广而告之,多谢!


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

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

Using Google App Engine

Using Google App Engine

Charles Severance / O'Reilly Media / 2009-5-23 / USD 29.99

With this book, you can build exciting, scalable web applications quickly and confidently, using Google App Engine - even if you have little or no experience in programming or web development. App Eng......一起来看看 《Using Google App Engine》 这本书的介绍吧!

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

html转js在线工具
html转js在线工具

html转js在线工具

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

RGB CMYK 互转工具