编译原理期末考试试题及答案 编译原理

C语言编译原理是什么?编译共分为四个阶段:预处理阶段、编译阶段、汇编阶段、链接阶段 。
1、预处理阶段:
主要工作是将头文件插入到所写的代码中,生成扩展名为“.i”的文件替换原来的扩展名为“.c”的文件,但是原来的文件仍然保留,只是执行过程中的实际文件发生了改变 。(这里所说的替换并不是指原来的文件被删除)
2、汇编阶段:
插入汇编语言程序,将代码翻译成汇编语言 。编译器首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,编译器把代码翻译成汇编语言,同时将扩展名为“.i”的文件翻译成扩展名为“.s”的文件 。
3、编译阶段:
将汇编语言翻译成机器语言指令,并将指令打包封存成可重定位目标程序的格式,将扩展名为“.s”的文件翻译成扩展名为“.o”的二进制文件 。
4、链接阶段:
在示例代码中,改代码文件调用了标准库中printf函数 。而printf函数的实际存储位置是一个单独编译的目标文件(编译的结果也是扩展名为“.o”的文件),所以此时主函数调用的时候,需要将该文件(即printf函数所在的编译文件)与hello world文件整合到一起,此时链接器就可以大显神通了,将两个文件合并后生成一个可执行目标文件 。

编译原理期末考试试题及答案 编译原理

文章插图
编译原理学了有什么用?对大多数人来说,学过编译原理,应该可以知道对于很多代码的优化,编译器其实可以做好,不需要自己写代码的时候杞人忧天 。在通用、局部的优化上,甚至编译器往往做得比程序员好 。
大概率会意识到编译原理背后的故事,也许会沉迷在某个方向,也许还会乐于看一些奇妙的parser构建方式 。
大概还可能会去学习类型系统,发现形式化的故事似乎在很多方面都有对应的版本,而后,他们也许会尝试走向研究,去挑战目前都没有好好解决的代码优化问题,也许会走向应用,用起LLVM,在上面加个target,支持一些新硬件,做个新语言的前端等 。
编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法 。内容包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成 。编译原理是计算机专业设置的一门重要的专业课程 。
编译原理课程是计算机相关专业学生的必修课程和高等学校培养计算机专业人才的基础及核心课程,同时也是计算机专业课程中最难及最挑战学习能力的课程之一 。编译原理课程内容主要是原理性质,高度抽象 。
编译可以分为五个基本步骤:词法分析、语法分析、语义分析及中间代码的生成、优化、目标代码的生成 。这是每个编译器都必须的基本步骤和流程, 从源头输入高级语言源程序输出目标语言代码 。
1、词法分析
词法分析器是通过词法分析程序对构成源程序的字符串从左到右的扫描, 逐个字符地读, 识别出每个单词符号, 识别出的符号一般以二元式形式输出, 即包含符号种类的编码和该符号的值 。
词法分析器一般以函数的形式存在, 供语法分析器调用 。当然也可以一个独立的词法分析器程序存在 。完成词法分析任务的程序称为词法分析程序或词法分析器或扫描器 。
2、语法分析
语法分析是编译过程的第二个阶段 。这阶段的任务是在词法分析的基础上将识别出的单词符号序列组合成各类语法短语, 如“语句”, “表达式”等.语法分析程序的主要步骤是判断源程序语句是否符合定义的语法规则, 在语法结构上是否正确 。
而一个语法规则又称为文法, 乔姆斯基将文法根据施加不同的限制分为0型、1型、2型、3型文法, 0型文法又称短语文法, 1型称为上下文有关文法, 2型称为上下文无关文法, 3型文法称为正规文法, 限制条件依次递增 。
3、语义分析
词法分析注重的是每个单词是否合法, 以及这个单词属于语言中的哪些部分 。语法分析的上下文无关文法注重的是输入语句是否可以依据文法匹配产生式 。
那么, 语义分析就是要了解各个语法单位之间的关系是否合法 。实际应用中就是对结构上正确的源程序进行上下文有关性质的审查, 进行类型审查等 。
4、中间代码生成与优化
在进行了语法分析和语义分析阶段的工作之后, 有的编译程序将源程序变成一种内部表示形式, 这种内部表示形式叫做中间语言或中间表示或中间代码 。

秒懂生活扩展阅读