把 12+3 切成有意义的小块,你会切成几块?
计算机原理 · 小纸条
选一章打印。双面打印(按长边翻页)后沿虚线剪开,每张卡片正面题目、背面答案。
第 1 页 · 正面(题目)
1什么是词法分析
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 * (乘号后面没东西)为什么不合语法?
第 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遍历语法树
遍历 + 节点时,应该先算它的孩子还是先算它自己?
第 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函数调用发生什么
函数执行完,程序怎么知道该回到哪里继续?