解释和字节码差在哪
解释执行和先编译成字节码,最大差别是【0】。 执行方式模型:解释执行边读边跑;字节码先编译一次、之后重复跑更省。cost(方式, runs):解释每次都解释 = 2*runs,字节码 = 1+runs
补全:判语义是否 OK
补全 ok:没有未定义变量才算语义 OK。 贯穿本节的小语言(判题机没 gcc,这是它的确定模型,见 spine.py):每行一条语句——set 名 = 表达式 或 print 表达式;表达式是空格分
补全:找未定义变量
补全 undefined:交回用到了、却没被 set 过的名字。 贯穿本节的小语言(判题机没 gcc,这是它的确定模型,见 spine.py):每行一条语句——set 名 = 表达式 或 print
补全:收集用到的变量
补全 used:把表达式里的变量名收进 names。 贯穿本节的小语言(判题机没 gcc,这是它的确定模型,见 spine.py):每行一条语句——set 名 = 表达式 或 print 表达式;表达
补全:收集已定义变量
补全 declared:收集所有 set 定义过的变量名。 贯穿本节的小语言(判题机没 gcc,这是它的确定模型,见 spine.py):每行一条语句——set 名 = 表达式 或 print 表达式
哪个变量没定义
按模型,undefined([("print",None,["a"])]) 交回什么? 贯穿本节的小语言(判题机没 gcc,这是它的确定模型,见 spine.p
这段语义通过吗
按模型,ok([("set","x",["1"]), ("print",None,["x"])])
用了没定义的变量算什么
表达式里用到一个从没 set 过的名字,属于【0】。 贯穿本节的小语言(判题机没 gcc,这是它的确定模型,见 spine.py):每行一条语句——set 名 = 表达式 或 print 表达式;表达
语义分析主要查什么
语法过关之后,语义分析主要负责查【0】。 贯穿本节的小语言(判题机没 gcc,这是它的确定模型,见 spine.py):每行一条语句——set 名 = 表达式 或 print 表达式;表达式是空格分隔
补全:数表达式长度
补全 expr_len:这条语句的表达式有几个 token(AST 第 2 位)。 parse 把一行变成 AST 元组:set 行 ("set", 名, 表达式tokens),p