如何在用python编写的解释器中实现多个赋值?

Saa*_*aad 6 python python-2.7 python-3.x

我正在python中编写一个解释器,我正在按照这个例子http://www.dabeaz.com/ply/example.html

我想知道如何实现多项任务,例如:

a=b=c=1a=(b=1)*1

我尝试过一些规则,但都是徒劳的.我知道解析应该是这样的.

a   b   c  1
 \  \    \/
  \  \   /
   \  \ /
     \ /
Run Code Online (Sandbox Code Playgroud)

我只是不确定如何用PLY写这个.

Tob*_*bia 4

大多数语言通过将赋值声明为表达式来避免这种情况。

在您的示例中,分配变为:

def p_expression_assign(t):
    'expression : NAME EQUALS expression'
    t[0] = names[t[1]] = t[3]
Run Code Online (Sandbox Code Playgroud)

我刚刚将函数名称和文档字符串语法中的“语句”更改为“表达式”,并“返回”(分配给t[0])正在分配的值。

我说“侥幸逃脱”是因为其他语言(例如Python)更加努力,因为它们允许多次赋值,但禁止在任何其他类型的表达式中使用赋值的结果。

但你的第二个例子a=(b=1)*1告诉我你想要前一种更宽松(或类似 C)的多重赋值形式。