补全:解析 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,从左到右求值