在阅读和学习《软件设计师教程》的过程中,学习到了程序语言基础这块的内容.这一章总共就两节,一共40多页,其中语言处理程序基础这小节就占了30多页,可见本章的主要内容在第二节.但是在我学习的过程中,感到非常的吃力,虽然我在专业课上曾经接触过文法和形式语言的一些东西,但是并没有任何轻松的感觉,相反越看越觉得不对劲,我在想可能是跑偏了,想起师姐曾经特意强调一定要看考纲,于是乎就翻看考纲关于这块知识的考察内容,如下图所示
看了之后决定以考纲为纲领对这块的知识进行一下总结,一是加深自己的印象和理解,同时也为其他的同学提个醒,免得一头扎进去出不来,时间耗费了许多,也没有达到预期的效果.虽然这些东西十分晦涩难懂,但是也不能不看,但是看哪些,怎么看就是你要考虑的了.我个人的想法是根据考纲的提示去掌握相应的知识点.上图中的I代表理解,II代表一般应用.
首先我们来了解第一个概念:什么是语言翻译?
众所周知,计算机的硬件只能识别由0和1序列构成的机器语言,因此我们使用高级程序语言编写的程序需要翻译成机器语言,计算机才能识别并且执行,这就是所谓的"语言翻译".
那么这种翻译的工作由谁来承担呢?我们通常称它们为"语言处理程序".语言之间的翻译形式有多种,基本方式为汇编,解释和编译.
汇编的基本方法是什么?
汇编语言源程序主要由三类语句构成:分别是指令语句,伪指令语句和宏指令语句.
所谓汇编就是将使用汇编语言编写的程序翻译成为机器指令程序,以便于机器识别和执行.汇编程序的基本工作主要由两部分:一是将每一条可执行汇编语句转换为对应的机器指令;二是处理源程序中出现的伪指令.
其基本方式是对源程序进行两次扫描:
第一次的扫描主要工作是定义符号的值并创建一个符号表ST,ST记录了汇编时所遇到的符号的值.另外还需要对与定义符号值有关的伪指令进行处理.
第二次扫描的主要任务是产生目标程序.此过程涉及两个方面的工作:一是把机器指令助记符转换成二进制指令操作码;二是求出操作数区各操作数的值(用二进制表示).
再来看下一个知识点,编译的基本过程及各阶段的基本任务.我用一张表格为大家展示一下:
顺序号 |
阶段名称 |
基本任务 |
1 |
词法分析 |
对源程序从前到后逐个字符地扫描,从中识别出一个个"单词"符号 |
2 |
语法分析 |
在词法分析完成后,根据语法规则将单词符号序列分解成各类语法单位,如表达式,语句等 |
3 |
语义分析 |
分析语法结构,检查源程序是否包含静态语义错误,进行类型分析和检查 |
4 |
中间代码生成 |
根据语义分析的输出生成中间代码 |
5 |
代码优化 |
对生成的中间代码进行优化,减少时空上的浪费 |
6 |
目标代码生成 |
把中间代码变换成特定机器上的绝对指令代码,可重定位的指令代码或汇编指令代码 |
解释的基本过程
解释程序通常可以分成两部分:
1分析部分,包括通常的词法分析,语法分析和语义分析程序,经语义分析后把源程序翻译成中间代码,
2解释部分,用来对第一部分产生的中间代码进行解释执行.
鉴于篇幅不宜过长,对于考纲中剩余部分的知识点,主要是形式语言与自动机理论的内容,就不在这里一一列出了,大家可以像我一样去书中将这些考点整理出来,然后认真分析,尽量理解,力争能够应用.我在这里想说的是一种学习的方式或者说方法,当我们在遇到非常难懂的理论性较强的学习内容时,当你感到茫然无措不知如何下手的时候,一定要学会抓住主要矛盾,不能一头扎进去出不来,造成学习整体效率的下降,其成果和付出的努力不成正比,同样我们也要学会使用二八定律,以最为经济的代价换取较大的回报.就这块的学习,我们不做理论研究,只求应用.