问题描述
我正在尝试创建一个自定义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?
谢谢!
解决方法
我做过类似您的事情,只是添加了中文关键字。它的工作原理如下:
-
确定错误消息为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'。还请注意顺序。
祝你好运,玩得开心!