错在哪个函数里
场景:~/程序/统计.txt 跑起来报运行时错误;解释器会打出调用栈(每层一行「在 …」,从外到内)。对照表列了八个名字。 任务:找出错误发生时最里面的那个函数(调用栈最后一行),到对照表里查它的名字对应的标记。 可操作范围:只在分给你的这
改程序,让输出和期望一样
场景:~/程序/账单.txt 应该打出 ~/期望.txt 里的两行,现在一跑就报运行时错误。 任务:读错误信息,改程序(只改错的地方),让它的输出和 期望.txt 一字不差、退出码 0。改好之后运行 ~/check。 可操作范围:只在分给你
修解释器里的 bug
场景:~/解释器.py 有一处 bug。~/测试/ 里七段程序,每段配一份 测试/期望/*.out(正确的输出),其中几段现在跑出来不一样。 任务:先跑一遍找出哪些不一样,再去解释器里定位、修好,让七段全部和期望一致。修好之后运行 ~/ch
给解释器加一个内置函数
场景:~/解释器.py 目前没有任何内置函数;~/程序/示例.txt 用了 max。 任务:给解释器加一个内置函数 max(a, b):交回两个参数里大的那个;参数个数不是 2 报「参数个数不对「max」」这类运行时错误;用户自己 fn m
交付:一键跑全部程序
场景:~/程序/ 里有六段程序(有的跑得通有的跑不通)。 任务:写一个 ~/批跑.sh:把 ~/程序/*.txt 逐个交给解释器跑,每段的标准输出存进 ~/输出/<名>.out(名字去掉 .txt),屏幕上每段一行「名字 退出码
字节码是什么
树上的格子一个个下来,排成一行 从下往上的顺序,变成从左到右的顺序 06 的解释器直接拿树跑。「字节码」是【0】。
树遍历慢在哪
06 说树遍历「每圈循环都重新走树」。它慢的具体原因是【0】。
和真编译的差别
字节码 + VM 和「编译成机器码直接跑」的差别是【0】。
为什么要有栈
树上的格子一个个下来,排成一行 从下往上的顺序,变成从左到右的顺序 本条的 VM 是「栈式」的:算 1 + 2 要先 PUSH 1、PUSH 2 再 BIN +。用栈的好处是【0】。
VM 是什么
「虚拟机」这三个字在本条指的是【0】。