为什么用字典

符号表用字典而不是列表来存,最直接的原因是【0】。

开始练习 →

三句 let 建出的表

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

开始练习 →

补全:登记一个名字

(每道题开头都有同一段:上一站的 parser(多记了位置)、show(),和错误类 SemError——错误写成一行「原因@行:列」。) 补全 declare(sym, name, typ, line, col):名字已经在表里就抛 Se

开始练习 →

补全:查一个名字

(每道题开头都有同一段:上一站的 parser(多记了位置)、show(),和错误类 SemError——错误写成一行「原因@行:列」。) 补全 lookup(sym, name):在表里就交回类型,不在就交回 None。

开始练习 →

补全:走一遍顶层语句

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

开始练习 →

块里的名字出了块

贯穿的源码: let rate = 12 ; let msg = "hi" ; let total = rate * 3 ; if ( total >= 30 ) { let big = 1 ; total = t

开始练习 →

里外同名

外面 let x = 1 ;,块里又 let x = "s" ;。这段程序的语义是【0】。

开始练习 →

从哪一层开始查

块里亮起来的名字,出了块还亮吗 ? 符号表变成了一叠:每进一个块压一层。查一个名字的顺序是【0】。

开始练习 →

两层表各查一次

(每道题开头都有同一段:上一站的 parser(多记了位置)、show(),和错误类 SemError——错误写成一行「原因@行:列」。) Scope 有 parent:lookup 先查自己、再查 parent。外层登记 x 是 num,

开始练习 →

出了块再用

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

开始练习 →