首页课程小红花墙

计算机原理 · 小纸条

选一章打印。双面打印(按长边翻页)后沿虚线剪开,每张卡片正面题目、背面答案。

第 1 章30第 2 章30第 3 章30第 4 章30第 5 章30第 6 章30第 7 章30第 8 章30第 9 章30第 10 章30第 11 章30第 12 章30第 13 章30第 14 章30第 15 章30第 16 章30第 17 章30第 18 章30第 19 章30第 20 章30第 21 章30第 22 章30第 23 章30第 24 章30第 25 章30第 26 章30第 27 章30第 28 章30第 29 章30第 30 章30第 31 章30第 32 章30第 33 章30第 34 章30第 35 章30第 36 章30第 37 章15
只印题目
第 1 页 · 正面(题目)
1什么是词法分析

把 12+3 切成有意义的小块,你会切成几块?

2什么是 token

x = 9 会切出哪几个 token?各是什么类型?

3空白与换行

7 * 2(中间很多空格)切出几个 token?

4认出数字

读到 4、5、+、6,数字 token 会怎么分?

5认出名字

if 和 ifs,哪个是关键字,哪个更可能是普通名字?

6认出符号

a == b 里,中间应该切成一个 token 还是两个?

7手写分词器

把 12+ab 这串字符按分词器的规则切开,会得到哪几个 token?

8注释怎么处理

5 + 6 # 这是加法 会生成几个 token?

9词法错误

假设某语言不认识 ?,那 3 ? 4 会在哪一站先出错?

10语法是什么

5 * (乘号后面没东西)为什么不合语法?

第 1 页 · 背面(答案)

参考答案(家长):x(名字)、=(符号)、9(数字),共 3 个。

参考答案(家长):3 块,12、+、3。

参考答案(家长):45 是一个数字 token,+ 是符号,6 是另一个数字 token。

参考答案(家长):3 个,7、*、2,空格被跳过。

参考答案(家长):一个 token ==(表示相等),不能拆成两个 =。

参考答案(家长):if 是关键字,ifs 是普通名字(标识符)。

参考答案(家长):3 个,5、+、6,注释被整段跳过。

参考答案(家长):三个:数字 12、符号 +、标识符 ab。

参考答案(家长):乘法需要左右各一个数,右边缺了一个,规则不满足。

参考答案(家长):词法分析(分词)这一站,遇到不认识的 ?。

第 2 页 · 正面(题目)
11语法规则

按"表达式 = 数字 | 表达式 + 表达式",1 + 2 + 3 合法吗?

12语法分析概览

语法分析的输入是什么?输出是什么?

13解析树

解析树很详细,这是优点还是缺点?

14抽象语法树

画出 8 - 2 的 AST(说出结构即可)。

15表达式变成树

把 2 * 3 + 4 画成树,哪个运算符在上层?

16运算优先级

算 10 - 2 * 3 等于多少?

17括号的作用

(10 - 2) * 3 等于多少?

18结合性

20 / 2 / 5 按从左到右等于多少?

19递归的语法

为什么递归的规则能描述任意长的算式?

20遍历语法树

遍历 + 节点时,应该先算它的孩子还是先算它自己?

第 2 页 · 背面(答案)

参考答案(家长):输入是一串 token,输出是一棵表示结构的树。

参考答案(家长):合法,可以看成 (1+2)+3,都符合规则。

参考答案(家长):根是 -,左孩子 8,右孩子 2。

参考答案(家长):都算,详细便于严格,但太啰嗦,后续会精简。

参考答案(家长):先算 2*3=6,再 10-6=4。

参考答案(家长):加号在上层,乘号在下层,因为乘法先算。

参考答案(家长):先 20/2=10,再 10/5=2。

参考答案(家长):先算 10-2=8,再 8*3=24。

参考答案(家长):先算孩子,拿到孩子的值后才能算自己。

参考答案(家长):因为规则可以不断套用自己,套多少层就能表示多长。

第 3 页 · 正面(题目)
21语义分析是什么

说一个"语法对但意思不通"的中文句子。

22名字用了没定义

a = b + 2 若 b 从没出现过,会报什么错?

23类型对不对

10 * "苹果" 在讲究类型的语言里合理吗?为什么?

24什么是变量

执行完 n = 5 再执行 n = 8,盒子 n 里现在是几?

25局部变量

函数里定义的 t,函数结束后还能在外面用吗?

26全局变量

为什么全局变量用多了容易出问题?

27作用域嵌套

里层代码能用外层定义的变量吗?外层能用里层的吗?

28变量遮蔽

外层 x=1,里层又 x=9,在里层用 x 是几?出去后呢?

29什么是栈帧

局部变量为什么函数一结束就没了?

30函数调用发生什么

函数执行完,程序怎么知道该回到哪里继续?

第 3 页 · 背面(答案)

参考答案(家长):b 未定义(用了没定义的名字)。

参考答案(家长):开放答案,如"我把星期二涂成蓝色的"。

参考答案(家长):8,后一次覆盖了前一次。

参考答案(家长):不合理,数字乘一段文字没有明确意义,会报类型错误。

参考答案(家长):谁都能改它,出错时很难找出是哪段代码改坏的。

参考答案(家长):不能,局部变量出了那段代码就失效。

参考答案(家长):里层是 9;出了里层,外层的 x 仍是 1。

参考答案(家长):里层能用外层的;外层不能用里层的。

参考答案(家长):调用时已经记下了返回位置,结束后照着回去。

参考答案(家长):因为它们放在函数的栈帧里,栈帧被收走它们就消失。

op599 课程