⚠️ 换四段新代码,再验一遍流水线
拿刚写好的探针试四段新代码,按三引号没关 / 少了右括号 / 函数外 return / 名字没定义的顺序: x = """abc print("hi"
阅读更多 →
自己写:一站一站往下放行
词法那一站已经写好了。把后面三站补上——每一站都是"上一站放行了,我再检查"。
阅读更多 →
⚠️ 语法站放行,语义站拦下
在函数外面写一句 return 1。让语法站(ast.parse)和语义站(compile)各判一次: import ast, io, tokenize def stage_of(src):
阅读更多 →
🔴 五段代码,各被哪一站拦下
五段代码:括号没关、缺冒号、函数外写 return、名字没定义、完全正常。拿一个"逐站放行"的函数跑一遍,看各自倒在哪儿: import ast, io, tokenize de
阅读更多 →
⚠️ 语义站和语法站差在哪
一句话语法完全合法,却仍然可能被第三站(语义)拦下来。因为语义站管的是【0】。
阅读更多 →
语法这一站在做什么
第二站(语法)干的活是【0】。
阅读更多 →
词法这一站在做什么
流水线第一站(词法)干的活是【0】。
阅读更多 →
编译流水线的四站,顺序是什么
从源码到能跑的东西,中间四站的顺序是【0】。
阅读更多 →
⚠️ 编译期把名字记下来了,只是没去查
上面那段 y = undefined_name 编译是过了的。既然过了,编译产物里关于那个不存在的名字,留下了什么?
阅读更多 →
自己写:分辨编译期错还是运行期错
补全 when_fails,三段代码各判一次。
阅读更多 →