微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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'。还请注意顺序。

祝你好运,玩得开心!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。