软考之程序语言与语言处理程序总结

 

1.程序设计语言分类

程序设计语言基本上可以分为命令式程序设计语言、函数式程序设计语言、面向对象程序设计语言和逻辑程序设计语言

命令式程序设计语言:基于动作的语言,计算在这里被看作是一个动作的序列。这些动作能够改变变量的值,最典型的动作就是赋值。代表有Fortran, Pascal和C语言等。

函数式程序设计语言主要用于人工智能领域,代表有Lisp, ML等。

面向对象程序设计语言中最核心的东西就是对象和类的概念。面向对象的三个核心概念就说封装、继承、多态。代表有C++, SmallTalk, Java, C#等。

逻辑程序设计语言是一类以形式逻辑为基础的语言,其代表是建立在关系理论和一阶谓词理论基础上的Prolog,其适用于书写自动定理证明,专家系统和自然语言理解等问题的程序。


2.什么是汇编语言?

      汇编语言是为特定的计算机设计的面向机器的符号化的程序设计语言。用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址。通常被应用在底层,硬件操作和高要求的程序优化的场合。驱动程序、嵌入式操作系统和实时运行程序都需要汇编语言。

    基本组成      

      汇编语言源程序主要由若干语句组成,主要的3类语句是:

        指令语句:机器指令语句,将其汇编后能产生相应的机器代码,这些代码被CPU直接识别并执行相应的操作。基本指令有:ADD、SUB、AND
        伪指令语句:指示汇编程序在汇编源程序时完成某些工作

        宏指令语句:多次重复使用程序段定义为宏,而宏指令是对宏的引用。

    汇编程序

      提到汇编语言,不得不说汇编程序,它是将用汇编语言编写的源程序翻译成机器指令程序。计算机一般不能直接识别汇编语言,但是经过汇编程序编译成机器指令之后即可识别。
      汇编程序一般需要两次扫描源程序才能完成翻译过程,第一次扫描时定义符号的值并创建一个符号表ST,记录汇编所遇到的符号值。第二次扫描是产生目标程序,将可执行的汇编语言翻译成对于的二进制代码机器指令。
      汇编语言的编译过程:
       词法分析:编译的第一个阶段,单词符号是基本语法单位
       语法分析:根据语法规则将单词符号序列分解成各类语法单位。

       词法和语法分析在本质上都是对源程序的结构进行分析

       语义分析:分析各语法结构的含义,检查源程序是否包含静态语义错误,并收集类型信息供后面的代码生成阶段使用。主要的一个工作是进行类型分析和检查
       只有语法和语义都正确的源程序才能翻译成正确的目标代码
       中间代码生成:根据语义分析的输出生成,与具体的机器无关。最常用的一种中间代码是与汇编语言的指令非常相似的三地址码,实现方式采用四元式
       语义分析和中间代码生成所依据的是语言的语义规则
      代码优化:可在中间代码阶段优化,也可在目标代码生成阶段进行。
         优化一般建立在对程序的控制流和数据流分析的基础之上,与具体的机器无关

      目标代码的生成:将中间代码变换成特定机器上的绝对指令代码、可重定位的指令代码或汇编指令代码


不是所有的编译器都会有中间代码生成和代码优化的过程。


3.解释程序和编译程序的区别

解释程序在词法,语法和语义分析方面与编译程序的工作原理基本相同,但是在运行用于程序时,他直接执行源程序或者源程序中间表示形式。因此,解释程不产生源程序的目标程序,这是它与编程程序的主要区别。

4.源程序、中间代码、目标代码的关系

源代码指的是用高级语言编写的程序,将源程序经过编译,就可以得到中间代码并且最终得到目标代码,目标代码就说可以在具体机器上执行的代码,这时源程序和编译程序都不再参与目标程序的执行过程,所以在机器上运行的目标程序是完全独立于源代码的。
另外,目标代码是在机器上运行的代码,所以它的生产与目标机器的体系结构是密切相关的。
中间代码是一种简单且含义明确的记号系统,与具体的机器无关,可以有若干种形式。可以将不同的高级程序语言翻译成同一种中间代码,另外由于与具体的机器无关,使用中间代码有利于进行与机器无关的优化处理,以及提高编译程序的可移植性。

5.编译与反编译

编译是将高级语言源程序翻译成机器语言程序(即目标代码),反编译是编译的逆过程。反编译通常是不能将可执行文件还原成高级语言源代码,只能转换成功能上等价的汇编程序。


6.源程序错误

源程序中可能出现的错误主要有三类:词法错误、语法错误和语义错误
1.词法错误:如非法字符或拼写错关键字、标识符等。
2.语法错误:语法结构出错,如少分号、begin/end不匹配等
3.静态语义错误:如类型不一致、参数不匹配等
4.动态语义错误(逻辑错误):如死循环、变量为零时做除数等
一般错误的诊断和恢复都在语法分析阶段,一个原因是大多数错误都是语法错误,另一个原因是语法分析方法的准确性,它能以非常有效的方法诊断语法错误。
在编译时,想诊断语义或逻辑错误是非常困难的,所以存在死循环这中错误,一般在编译的时候不会报错,只有到程序运行时才会发现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值