此刻支持的语法
a=2
b=a*a
print(a+b)
项目地址仍在此。
接续上文,添加赋值的支持。
相关语法修改如下:
声明列表 : 声明
| 声明列表 换行 声明
声明 : 表达式声明
| 赋值
表达式声明 : 表达式
赋值 : 表达式前缀 = 表达式
表达式 : 二元表达式
| 表达式前缀
| 数
表达式前缀 : 名称
| 调用
其他没啥好说,这里一段:
@分析器母机.production('赋值 : 表达式前缀 = 表达式')
def 赋值(片段):
#print("赋值")
片段[0].ctx = ast.Store()
return 语法树.赋值(
变量 = 片段[0],
值 = 片段[2],
片段 = 片段)
如果没设置ctx
为ast.Store()
,则运行时报错:
ValueError: expression must have Store context but has Load instead
官方语法文档中,表达式上下文有这几种:
expr_context = Load | Store | Del | AugLoad | AugStore | Param
看来,表达式如果是被写入,上下文就是Store
;如果是被读取,上下文就是Load
。
接下来,条件语句吧?