如何解决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
谢谢!
解决方法
我做过类似您的事情,只是添加了中文关键字。它的工作原理如下:
-
确定错误消息为msg。它位于。\ Tools \ peg_generator \ pegen \ c_generator.py中。打开文件,您可以在AssertionError上方看到re.match行。修改匹配模式以适合您的需求。
-
运行make regen-pegen以重新生成Parser / parser.c。您可能还需要从此文件的第11行开始对reserve_keywords []进行细微更改。以我的情况为例,以“函件”(相当于“ def”)为例,它出现在修改前的第二个{}内部,但是一个中文字符在utf-8中使用3个字节,因此它应该位于第四个{}内部与'def'。还请注意顺序。
祝你好运,玩得开心!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。