基于「木兰」编译器,加十行代码实现 ∈ (属于集合)语法
发布日期:2021-06-29 15:29:28
浏览次数:2
分类:技术文章
本文共 1356 字,大约阅读时间需要 4 分钟。
因为有位在评论中提到想实现∈语法。虽然不在 的范畴中,但感觉可以很方便地通过『木兰』的语法定制机制实现。于是对的 ulang 下的代码作了以下修改(未提交到 git,因为很容易修改)。
parser/lexer.py
先在 RULES 中加了 '∈'
,接着在分词器母机中加了对应词:lg.add('∈', '∈')
parser/core.py
对分析器母机添加以下语法规则:
@pg_.production('bin_expr : expr ∈ expr') def 属于(self, 片段): return ast.Compare((片段[0]), [ast.In()], [片段[2]], lineno=(self.getlineno(片段)), col_offset=(self.getcolno(片段)))
因为等价于 in,然后发现 python 中的 in 是。
运行结果
$ python3 -m ulang/Users/xuanwu/work/木兰/mulan_reverse/ulang/parser/core.py:1641: ParserGeneratorWarning: 24 shift/reduce conflicts parser_ = LRParser(pg_.build())[[262, "'DOTDOTLT'", 'shift'], [262, "'DOTDOT'", 'shift'], [262, "'?'", 'shift'], [262, "'|'", 'shift'], [262, "'&'", 'shift'], [262, "'^'", 'shift'], [262, "'<<'", 'shift'], [262, "'>>'", 'shift'], [262, "'*'", 'shift'], [262, "'-'", 'shift'], [262, "'+'", 'shift'], [262, "'∈'", 'shift'], [262, "'%'", 'shift'], [262, "'/'", 'shift'], [262, "'!=='", 'shift'], [262, "'==='", 'shift'], [262, "'!='", 'shift'], [262, "'=='", 'shift'], [262, "'<='", 'shift'], [262, "'<'", 'shift'], [262, "'>='", 'shift'], [262, "'>'", 'shift'], [262, "'OR'", 'shift'], [262, "'AND'", 'shift']]Welcome to ulang's REPL..Type 'help' for more informations.> 3 ∈ [3]true> 1 ∈ [3]false> [1] ∈ [2, [1], 3]true> 'a' ∈ [2, 'b', [1], 3]false
前面那个警告不明觉厉,待研究。后面的运行结果如预期。
是不是,对「木兰」兴趣更大了呢?
转载地址:https://codeinchinese.blog.csdn.net/article/details/104471315 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2024年04月30日 05时34分13秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Linux下EasyPanel版本安装及升级
2019-04-29
raspberry pi(树莓派) + easycap d60 视频采集
2019-04-29
WebRTC
2019-04-29
rfc5766-turn-server NAT
2019-04-29
webrtc详细教程
2019-04-29
Android IOS WebRTC 音视频开发总结
2019-04-29
报表图表样式
2019-04-29
android模板图例
2019-04-29
树莓派网线直连
2019-04-29
复合材料培训(I第七期)
2019-04-29
复合材料生活中的应用
2019-04-29
ABAQUS复合材料(适合小白)
2019-04-29
ABAQUS高级案例解析
2019-04-29
人工智能药物研发
2019-04-29
【超级干货+福利】AIDD最全面的学习教程
2019-04-29
最新通知:AIDD与网络药理学资料大全
2019-04-29
Lammps分子动力学与第一性原理材料模拟及催化
2019-04-29
实习生小白的日常
2019-04-29
实习小白的日常(4)
2019-04-29
微信扫码登录验证PHP代码(不用开放平台)
2019-04-29