补全:把类型打出来

补全:把类型打出来

(每道题开头都有同一段:上一站的 parser(多记了位置)、show(),和错误类 SemError——错误写成一行「原因@行:列」。) 补全 show_t 的 bin 分支:左、运算符、右,外加括

阅读更多 →
补全:把类型记进 ann

补全:把类型记进 ann

(每道题开头都有同一段:上一站的 parser(多记了位置)、show(),和错误类 SemError——错误写成一行「原因@行:列」。) 补全 annotate:推类型的逻辑和 type_of 一样

阅读更多 →
前三句的装饰树

前三句的装饰树

(每道题开头都有同一段:上一站的 parser(多记了位置)、show(),和错误类 SemError——错误写成一行「原因@行:列」。) 贯穿的源码: let rate = 12 ; let msg

阅读更多 →
带类型的树

带类型的树

(每道题开头都有同一段:上一站的 parser(多记了位置)、show(),和错误类 SemError——错误写成一行「原因@行:列」。) annotate 推类型时把每个表达式节点的类型记进 ann

阅读更多 →
标注放在哪

标注放在哪

这条路线的节点是元组,改不了。给节点加类型标注,可行的办法是【0】。

阅读更多 →
为什么把类型写回树

为什么把类型写回树

类型已经推出来了,语义分析还要把它「标注」在树的节点上。这样做的好处是【0】。

阅读更多 →
补全:类型顺着名字传下去

补全:类型顺着名字传下去

(每道题开头都有同一段:上一站的 parser(多记了位置)、show(),和错误类 SemError——错误写成一行「原因@行:列」。) let d = c ; 的右边只是一个名字。补全 type_

阅读更多 →
补全:记下推断的轨迹

补全:记下推断的轨迹

(每道题开头都有同一段:上一站的 parser(多记了位置)、show(),和错误类 SemError——错误写成一行「原因@行:列」。) 补全 trace(n, scope, out):bin 节点

阅读更多 →
补全:let 的类型不能一律当 num

补全:let 的类型不能一律当 num

(每道题开头都有同一段:上一站的 parser(多记了位置)、show(),和错误类 SemError——错误写成一行「原因@行:列」。) 下面 check_stmt 的 let 分支还用着 n02

阅读更多 →
一段程序推出的表

一段程序推出的表

(每道题开头都有同一段:上一站的 parser(多记了位置)、show(),和错误类 SemError——错误写成一行「原因@行:列」。) 五句 let,右边分别是数字、字符串、字符串拼接、乘法、比较

阅读更多 →