知乎原文地址 作者:@狗屎咖啡

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添加中文关键字相关推荐

  1. 2017-11-17 为Python添加中文关键字 1

    知乎原文地址 作者:@狗屎咖啡 swizl/cnpython 1.大部分语法,可以按下面方法加同义的中文token 第1步. 编译pgen cd到python的源代码目录下, ./configure ...

  2. 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 ...

  3. python中文解释-python注释中文

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 4.python代码注释最后更新于:2019-10-05 14:25:4 ...

  4. python语言中文社区-python解决中文

    广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! python 添加中文注释时出现运行失败. 需要在顶部设置编码. # coding ...

  5. 第11.15节 Python正则表达式转义符定义的特殊序列

    一. 引言 在前面<第11.13节 Python正则表达式的转义符"\"功能介绍>介绍了正则表达式转义符'\',只不过当时作为转义符主要是用于在正则表达式中表示元字符自 ...

  6. python语言的两种注释方法_python编程时添加中文注释的方法

    python编程时添加中文注释的方法 发布时间:2020-08-24 17:09:52 来源:亿速云 阅读:77 作者:小新 这篇文章主要介绍python编程时添加中文注释的方法,文中介绍的非常详细, ...

  7. opencv在图片上添加中文汉字(c++以及python)

    文章目录 一. 汉字点阵字库实现原理 1. 汉字编码 1.1 区位码 1.2 机内码 2. 点阵字库结构 2.1 点阵字库存储 2.2 16*16点阵字库 3. 汉字点阵获取 3.1 利用区位码获取汉 ...

  8. python的中文含义-python关键字以及含义,用法

    Python常用的关键字 1.and , or and , or 为逻辑关系用语,Python具有短路逻辑,False and 返回 False 不执行后面的语句, True or 直接返回True, ...

  9. Python中添加中文注释报错SyntaxError: Non-UTF-8 code starting with '\xc1'

    问题:在文本编辑器中编辑Python文件时添加中文注释,运行python文件时报错.SyntaxError: Non-UTF-8 code starting with '\xc1' 解决方法:在文本开 ...

最新文章

  1. 怎么才能转入大数据领域 ,成为一名合格的大数据分析师...
  2. 提高系统性能——对SQL语句优化的思考
  3. HTML5_1 笔记
  4. 一个numpy报错——ValueError: Object arrays cannot be loaded when allow_pickle=False
  5. href脱离iframe显示
  6. mysql Slave is not configured or failed to initialize properly. You must at least set --server-id
  7. 训练日志 2018.11.14
  8. React Navigation (v2)
  9. SQLServer 维护脚本分享(05)内存(Memory)
  10. matlab的findpeak 极点查找
  11. DNS服务器之二:从服务器的实现
  12. R语言包的升级与降级
  13. 卡巴斯基回应瑞星:将在中国架升级服务器
  14. win7下开启梦幻桌面
  15. MSN的头像存放路径
  16. matlab的textscan,matlab中textscan函数的使用记录
  17. 26 分解质因子 容斥 数学公式
  18. vue3如何去掉控制台的warn信息
  19. Linux学习日记之初始用户管理
  20. 1076 Wifi密码

热门文章

  1. apex图表使用饼图居中_echarts饼图标题居中以及调整主副标题的间距、字号
  2. exit() 与_exit的区别
  3. python类的继承super方法_Python类的继承super相关原理解析
  4. java调用outlook
  5. Tarjan水题系列(2):HNOI2012 矿场搭建
  6. 2. TypeScript笔记
  7. [patl2-001]紧急救援
  8. ionic集成jPush极光推送
  9. 关于数据库的备份和某个表的数据备份的相关步骤介绍
  10. checkedListBox使用例子