《编译原理复习题集》涵盖了编译器设计的多个核心概念,包括文法、解析方法、优化和代码生成等多个方面。以下是这些题目中涉及的知识点详解:
1. 高级语言的翻译有两种主要方式:解释和编译。解释是逐行执行,而编译是将整个程序转换成机器码后再执行。
2. 不是所有文法都可以改写为LL(1)文法,LL(1)文法具有特定的构造规则,要求从左到右扫描输入并有明确的解析决策。
3. 算符优先关系表可以没有对应的优先函数,这意味着有些语言的运算符优先级可能不是清晰的。
4. LR分析方法是自底向上的语法分析,而不是自顶向下。
5. 高级语言编写的程序通常需要经过编译,生成目标代码后才能运行,但解释型语言则不需要。
6. 句型的句柄是文法某个产生式的右边部分,它可以用来引导解析过程。
7. 在局部作用域中,仅考虑基本块无法确定变量的使用情况,需要全局分析。
8. 循环优化包括不变表达式外提和减少运算强度,但这两者并非循环优化的全部。
9. FORTRAN语言通常采用静态存储分配,而不是动态的。
10. 编译程序在不同机器间迁移需要考虑操作系统差异,直接使用通常是不行的。
11. 递归下降分析法是一种自顶向下的分析技术。
12. 产生式是用来定义语法结构,而非词法成分。
13. SLR(1)中的"S"代表简单SLR。
14. 综合属性是从下向上传递信息。
15. 目标代码生成阶段要考虑寄存器的有效利用。
16. 符号表存储了标识符的属性,如类型、大小、地址等。
17. 程序语言的处理程序,如编译器,属于系统软件。
18. 解释程序并不适用于COBOL和FORTRAN这样的编译型语言。
19. LL(1)文法没有二义性意味着每个句子只能有一种解析方式。
20. 上下文无关文法可以描述正规文法产生的语言。
21. 有限状态自动机的终态可能不止一个。
22. 后缀表达式(逆波兰表示法)不需要括号,易于计算。
23. 二义文法是指存在句子对应多棵语法树的情况。
24. 数组地址计算与存储方式密切相关,例如行主序或列主序。
25. 算符优先文法可能没有对应的优先函数。
26. 解释执行不同于编译执行,前者是逐行解释,后者是生成目标代码后执行。
27. 一个有限状态自动机可以有多个终态。
28. 左递归的消除是为了简化语法分析。
29. LR分析法能尽早发现错误,但定位错误位置的能力有限。
30. 逆波兰表示法简化了表达式的处理,不需要括号。
31. 静态数组的大小在编译时即可确定。
32. 代码优化,特别是循环优化,对提升效率至关重要。
33. 正规集相等的必要条件是正规式等价。
34. 语义子程序描述了翻译过程,但不一定是文法对应的。
35. 对于正规式,L(r|s) ≠ L(r)L(s),即并集不等于积。
36. 确定和不确定的自动机都能识别正规集,但处理方式不同。
37. 词法分析可以与其他阶段合并处理,不一定要单独进行。
38. 构造LR分析器的关键步骤是构建LR分析表。
39. 规约和推导是编译过程中的两种相反操作。
40. 同心集合并可能导致“移进/归约”冲突。
41. LR分析技术可以处理某些二义文法,但不是所有。
42. 三元式和间接三元式通常比树形表示和四元式更适合优化。
43. 表达式语句的语义翻译通常不需要回填技术。
44. 中间代码优化并不总是依赖具体机器,有时是通用的。
45. 句型的句柄不一定是产生式右部,也可能是一部分。
46. 标识符不仅有使用性,还包含语义信息。
47. 削减运算强度可能导致在基本块内部多次定义临时变量。
48. 编译程序与目标机器密切相关,也与源语言的特性紧密相连。
49. 选择题部分强调了编译程序的组成部分(如语法分析)、错误检测能力、解释程序的工作方式、编译程序的性质以及文法的分类等。
以上知识点涵盖了编译原理的多个重要概念,包括编译过程的各个阶段、文法的性质、解析技术、代码优化以及编译器设计的基本原理。这些知识对于理解和构建编译器至关重要。