我正在用 python 编写一个解释器,我正在关注这个例子 http://www.dabeaz.com/ply/example.html
我想知道如何实现多重赋值,例如:
a=b=c=1
和 a=(b=1)*1
我尝试了一些规则,但都是徒劳的。我知道解析应该是这样的。
a b c 1
\ \ \/
\ \ /
\ \ /
\ /
我只是不确定如何使用 PLY 来编写它。
最佳答案
大多数语言通过将赋值声明为表达式来逃避它。
在您的示例中,分配变为:
def p_expression_assign(t):
'expression : NAME EQUALS expression'
t[0] = names[t[1]] = t[3]
我只是在函数名称和文档字符串语法中将“语句”更改为“表达式”,并“返回”(分配给 t[0]
)正在分配的值.
我说“逃避”是因为其他语言(例如 Python)走得更远,因为它们允许多重赋值,但禁止在任何其他类型的表达式中使用赋值的结果。
但是你的第二个例子 a=(b=1)*1
告诉我你想要前者,更宽松(或类似 C)的多重赋值形式。
关于python - 如何在用python编写的解释器中实现多重赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15932717/