CPython 3.9 python.gram文件-尝试使用utf-8文本运行make regen-pegen时出错

问题描述

我正在尝试创建一个自定义Python版本,并能够用希伯来语编写关键字。 我克隆了CPython,并尝试编辑python.gram文件,以便也接受希伯来语关键字。 例如,在for关键字中,我尝试这样做: 代替:

for_stmt[stmt_ty]:
| 'for' t=star_targets 'in' ~ ex=star_expressions ':' tc=[TYPE_COMMENT] b=block el=[else_block] {
    _Py_For(t,ex,b,el,NEW_TYPE_COMMENT(p,tc),EXTRA) }

我试图写:

for_stmt[stmt_ty]:
| ('עבור' | 'for') t=star_targets 'in' ~ ex=star_expressions ':' tc=[TYPE_COMMENT] b=block el=[else_block] {
    _Py_For(t,EXTRA) }

但是当我再次尝试运行make regen-pegen时,出现此错误: AssertionError: 'עבור' is not a known literal

有什么事要做?还是不支持utf-8?

谢谢!

解决方法

我做过类似您的事情,只是添加了中文关键字。它的工作原理如下:

  1. 确定错误消息为msg。它位于。\ Tools \ peg_generator \ pegen \ c_generator.py中。打开文件,您可以在AssertionError上方看到re.match行。修改匹配模式以适合您的需求。

  2. 运行make regen-pegen以重新生成Parser / parser.c。您可能还需要从此文件的第11行开始对reserve_keywords []进行细微更改。以我的情况为例,以“函件”(相当于“ def”)为例,它出现在修改前的第二个{}内部,但是一个中文字符在utf-8中使用3个字节,因此它应该位于第四个{}内部与'def'。还请注意顺序。

祝你好运,玩得开心!

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...