2017-11-17 为Python添加中文关键字
知乎原文地址 作者:@狗屎咖啡
swizl/cnpython
1.大部分语法,可以按下面方法加同义的中文token
第1步. 编译pgen
cd到python的源代码目录下,
./configure
make Parser/pgen
第2步. 修改 ./Grammar/Grammar,添加同义词并生成语法代码。
以while,else为例
原文:
while_stmt: 'while' test ':' suite ['else' ':' suite]
改为:
while_stmt: ('while'|当) test ':' suite [('else'|另) ':' suite]
保存 ./Grammar/Grammar为UTF-8格式
执行
./Parser/pgen ./Grammar/Grammar ./Include/graminit.h ./Python/graminit.c
虽然会提示错误,但输出是有效正确的。
其实pgen不支持UTF-8,这里 中文名 不需要用单引号或双引号,利用pgen的容错性,减少工作量。
2.还有一较复杂语法在/Python/ast.c 里有辅助解析
例如
comp_op: ... |'in'|'not' 'in'|'is'|'is' 'not'
改为
comp_op: ... |('in'|在)|('not' 'in'|不在)|('is'|为)|('is' 'not'|不为)
在ast.c里的 ast_for_comp_op 中
if (NCH(n) == 1)switch (TYPE(n))case NAME:
/******添加如下代码*******/if (strcmp(STR(n), "在") == 0) return In;if (strcmp(STR(n), "不在") == 0) return NotIn;if (strcmp(STR(n), "为") == 0) return Is;if (strcmp(STR(n), "不为") == 0) return IsNot;
其实从源代码我们可以看出来,comp_op原来的判断是token有两个单词的话,第二个单词为in返回NotIn,第一个单词为is返回IsNot。
另外就是 None,True,False,finally,async,await 需要添加一下。
3.内置函数 中文化
在/Python/bltinmodule.c中的builtin_methods[]中添加
以print为例,将含"print"的一行复制粘贴,替换第二行的"print"为"打印"即可
{"print", (PyCFunction)builtin_print, METH_FASTCALL | METH_KEYWORDS, print_doc},{"打印", (PyCFunction)builtin_print, METH_FASTCALL | METH_KEYWORDS, print_doc},
其他的还有一些宏,展开看一下,就明白了。
BUILTIN_LEN_METHODDEF{"长", (PyCFunction)builtin_len, METH_O, builtin_len__doc__},
之后 make 编译python即可。
中文的py文件也需要保存为UTF-8格式。
2017-11-17 为Python添加中文关键字相关推荐
- 2017-11-17 为Python添加中文关键字 1
知乎原文地址 作者:@狗屎咖啡 swizl/cnpython 1.大部分语法,可以按下面方法加同义的中文token 第1步. 编译pgen cd到python的源代码目录下, ./configure ...
- 2017.11.17 Demo-stm8+temperature timeing control
1Find the lab and add in project. Downtown it from ST official website..compile it to ensure it pa ...
- python中文解释-python注释中文
广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 4.python代码注释最后更新于:2019-10-05 14:25:4 ...
- python语言中文社区-python解决中文
广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! python 添加中文注释时出现运行失败. 需要在顶部设置编码. # coding ...
- 第11.15节 Python正则表达式转义符定义的特殊序列
一. 引言 在前面<第11.13节 Python正则表达式的转义符"\"功能介绍>介绍了正则表达式转义符'\',只不过当时作为转义符主要是用于在正则表达式中表示元字符自 ...
- python语言的两种注释方法_python编程时添加中文注释的方法
python编程时添加中文注释的方法 发布时间:2020-08-24 17:09:52 来源:亿速云 阅读:77 作者:小新 这篇文章主要介绍python编程时添加中文注释的方法,文中介绍的非常详细, ...
- opencv在图片上添加中文汉字(c++以及python)
文章目录 一. 汉字点阵字库实现原理 1. 汉字编码 1.1 区位码 1.2 机内码 2. 点阵字库结构 2.1 点阵字库存储 2.2 16*16点阵字库 3. 汉字点阵获取 3.1 利用区位码获取汉 ...
- python的中文含义-python关键字以及含义,用法
Python常用的关键字 1.and , or and , or 为逻辑关系用语,Python具有短路逻辑,False and 返回 False 不执行后面的语句, True or 直接返回True, ...
- Python中添加中文注释报错SyntaxError: Non-UTF-8 code starting with '\xc1'
问题:在文本编辑器中编辑Python文件时添加中文注释,运行python文件时报错.SyntaxError: Non-UTF-8 code starting with '\xc1' 解决方法:在文本开 ...
最新文章
- 怎么才能转入大数据领域 ,成为一名合格的大数据分析师...
- 提高系统性能——对SQL语句优化的思考
- HTML5_1 笔记
- 一个numpy报错——ValueError: Object arrays cannot be loaded when allow_pickle=False
- href脱离iframe显示
- mysql Slave is not configured or failed to initialize properly. You must at least set --server-id
- 训练日志 2018.11.14
- React Navigation (v2)
- SQLServer 维护脚本分享(05)内存(Memory)
- matlab的findpeak 极点查找
- DNS服务器之二:从服务器的实现
- R语言包的升级与降级
- 卡巴斯基回应瑞星:将在中国架升级服务器
- win7下开启梦幻桌面
- MSN的头像存放路径
- matlab的textscan,matlab中textscan函数的使用记录
- 26 分解质因子 容斥 数学公式
- vue3如何去掉控制台的warn信息
- Linux学习日记之初始用户管理
- 1076 Wifi密码