在python中重命名elif

在python中重命名elif,python,python-2.7,grammar,cpython,Python,Python 2.7,Grammar,Cpython,我最近在python中添加了一些可选的语句名,这很好,直到我使用了if语句,并为else和elif添加了可选的名称: if_stmt = 'if' test ':' suite ('elif' test ':'suite)* ['else' ':' suite] | 'wenn' test ':' suite ('andernfalls' test ':'suite)* ['sonst' ':' suite] 然后它编译时没有错误,但当我使用wenn和Andernfall运行测试时,解释器抛

我最近在python中添加了一些可选的语句名,这很好,直到我使用了if语句,并为else和elif添加了可选的名称:

if_stmt = 'if' test ':' suite ('elif' test ':'suite)* ['else' ':' suite] |  'wenn' test ':' suite ('andernfalls' test ':'suite)* ['sonst' ':' suite]
然后它编译时没有错误,但当我使用wenn和Andernfall运行测试时,解释器抛出了错误:

SystemError: unexpected token in 'if' statement: andernfalls 
我做的其他每一个加法都很有效。那么为什么我不能添加其他和elif,我该怎么做呢

我正在修改python网站上最新的python 2.7代码

编辑 我的测试代码是:

x = 1
y = 2
wenn x > y:
    print 1
andernfalls x < y:
    print 2
sonst:
    print 3
x=1
y=2
wenn x>y:
打印1
Andernfall x

我在顶部添加行的文件是python源代码语法目录中的语法文件

else
elif
在AST生成代码中有一些特殊的大小写处理:

static stmt\ty
如果stmt(结构编译*c,常量节点*n)的ast\u
{
...
/*字符串中的第三个字符s[2]将
“s”代表el_s_e,或
“我”代表el_i_f
*/
如果(s[2]=='s'){
...
}
如果(s[2]='i'){
...
if(TYPE(CHILD(n,(n_elif+1))==名称
&&STR(CHILD(n,(n_elif+1)))[2]='s'){
...

如果stmt
的话,你必须修改
ast\u以改变处理方式。

只是为了完全清楚:你正在编辑CPython的语法,并试图将
if
elif
else
重命名为
wenn
andernfall
,以及
sonst
?这似乎是硬编码d在多个地方…我发现您不可能在一个地方更改类似的内容并使其无缝工作。向我们展示您尝试运行的代码。此外,您是如何修改解释器的?您更改了哪些特定文件,以及如何更改?@ChristianDean添加可选的使用if-elif和else与wenn Andernfall和sonst@Aaron对于我为其添加的每个其他语句,我都将if语句更改为if(s[2]='s'| | s[2]='n'),将else if更改为else if(s[2]='i'| | s[2]='d')但当我的示例代码中有x=2和y=2时,它应该转到sonst并打印3,但它不知道为什么@user2357112@lokilocus:如果不打印3,会发生什么情况?在
elif
处理中,您可能遗漏了另一个
else
特殊情况:
STR(CHILD(n,(n_elif+1)))[2]='s'