补全:解析 set 表达式

补全 parse:set 行的表达式是等号后面的部分 t[3:]。 parse 把一行变成 AST 元组:set 行 ("set", 名, 表达式tokens),print 行 ("print", N

开始练习 →

补全:取语句类别

补全 stmt_kind:这行是哪种语句(第一个词)。 parse 把一行变成 AST 元组:set 行 ("set", 名, 表达式tokens),print 行 ("print", None, 表

开始练习 →

补全:取赋值目标

补全 target:set 语句赋值给哪个变量(AST 第 1 位)。 parse 把一行变成 AST 元组:set 行 ("set", 名, 表达式tokens),print 行 ("print",

开始练习 →

补全:数表达式长度

补全 expr_len:这条语句的表达式有几个 token(AST 第 2 位)。 parse 把一行变成 AST 元组:set 行 ("set", 名, 表达式tokens),print 行 ("print&

开始练习 →

语义分析主要查什么

语法过关之后,语义分析主要负责查【0】。 贯穿本节的小语言(判题机没 gcc,这是它的确定模型,见 spine.py):每行一条语句——set 名 = 表达式 或 print 表达式;表达式是空格分隔的 token,从左到右求值(无优先级)

开始练习 →

用了没定义的变量算什么

表达式里用到一个从没 set 过的名字,属于【0】。 贯穿本节的小语言(判题机没 gcc,这是它的确定模型,见 spine.py):每行一条语句——set 名 = 表达式 或 print 表达式;表达式是空格分隔的 token,从左到右求值

开始练习 →

这段语义通过吗

按模型,ok([("set","x",["1"]), ("print",None,["x"])]) 交回什么? 贯穿本节的小语言(判题机没

开始练习 →

哪个变量没定义

按模型,undefined([("print",None,["a"])]) 交回什么? 贯穿本节的小语言(判题机没 gcc,这是它的确定模型,见 spine.py):每行一条语句——set 名 = 表

开始练习 →

补全:收集已定义变量

补全 declared:收集所有 set 定义过的变量名。 贯穿本节的小语言(判题机没 gcc,这是它的确定模型,见 spine.py):每行一条语句——set 名 = 表达式 或 print 表达式;表达式是空格分隔的 token,从左到

开始练习 →

补全:收集用到的变量

补全 used:把表达式里的变量名收进 names。 贯穿本节的小语言(判题机没 gcc,这是它的确定模型,见 spine.py):每行一条语句——set 名 = 表达式 或 print 表达式;表达式是空格分隔的 token,从左到右求值

开始练习 →