软考二——程序设计语言

引言:

       程序设计语言的基本概念是为程序员写出一个好的程序提供了所需的抽象机制、组织原则以及控制结构。

总述:

        学习程序设计语言,先要解决俩个问题:是什么和能做什么?那么到底程序设计语言是什么哪?抛开基本概念,它的具体内容是什么?同时我们也应该知道,它的出现能做什么,怎么去做?下面先通过一幅图总体了解一下程序设计语言的框架:


是什么?

        程序设计语言的具体内容包括概念部分和基本组成部分,先说概念部分,这部分对程序设计语言的概念做了具体的讲解。这部分一共分为定义、翻译形式、分类三部分,先说定义部分,这部分分为语法——语义——语用——语言,这四个部分依次组成。定义部分就和我们以前学习英语一样,先学习单词、然后是句子的语法、再然后是句子的语义,最后就是句子的语义如何去用,最后形成了英语。英语单词对应程序设计语言的词法,词法就是一些程序设计语言基本字符构成的符号,也可以叫做单词,这些单词的书写规则称为词法规则;而语法是指由程序设计语言的基本符号组成程序中的各个语法成分(包括程序)的一组规则,由符号构成语法成分的规则称为语法规则;语义分为静态和动态语义,语义就是语法成分的含义,编译时可以确定语义就是静态语义,运行时刻才能确定的含义是动态语义;语用是构成语言的符号和使用者的关系,涉及符号的来源、使用和影响;有了单词(基本字符组成的符号)、语法、语义、语用就形成了各种各样的程序设计语言,语言有相应的运行环境,包括编译环境和运行环境。
        程序设计语言的翻译形式分为:汇编、编译、解释。先知道一个概念:源程序:由某种高级语言或者汇编语言编写的程序。如果源程序是汇编语言编写的,那么就需要用汇编语言来将其翻译成目标程序才能被执行;如果是高级语言编写的源程序,那么就需要对应的解释程序或编译程序对其进行翻译,然后在机器上运行。解释器直接解释执行源程序或者将源程序翻译成某种中间代码后再加以执行;编译器则是将源程序翻译成目标语言程序,然后在计算机上运行目标程序。二者的区别:解释器不生成独立的目标程序,编译器则将源程序翻译成独立保存的目标程序。
        程序设计语言的分类分为发展分类和应用分类,发展分类由低级语言发展到高级语言,低级语言分为机器语言和汇编语言,高级语言是抽象级别更高的语言;应用分类分为:结构化、面向对象、函数式、逻辑型程序设计语言。下面一个表格是对应用分类的简单汇总:
         下面我们来说程序设计语言的基本成分,一共包括数据、运算、控制、传输。数据成分分为常量和变量、全局量和局部量、数据类型,这些知识的了解基本不用讲解了;下面是运算部分,这部分可以分为算术、关系、逻辑等,这部分主要是运算符号的优先级;控制部分:顺序、选择、循环;传输部分:语言允许的数据传输方式 ,例如赋值、数据输入与输出等;这里还有一个是函数的调用,这个我觉得应该轨道运算成分里面,这个点主要是区分值调用与引用调用,值调用:实现函数调用把实参的值传递给形参,形参不能向实参传递信息,引用调用:当形参为引用类型,形参名其实是实参的别名,函数中对形参的访问与修改实际是对实参的访问与修改。

怎么做?

      下面总结程序设计语言怎么来设计程序和实现程序与机器的结合。这部分一共分为汇编和编译以及解释三大原理。
        一 先看汇编原理,分为汇编语言和汇编程序,汇编语言是为特定计算机设计的面向机器的符号化的程序设计语言,由汇编语言编写的程序叫做汇编语言源程序,这个和后面的汇编程序要区分开。
       1 一个汇编源程序包括指令语句、伪指令语句、宏指令语句三类语句。
        (1 )指令语句就是机器指令语句,将其汇编后形成相应的机器代码直接能被CPU识别并执行相应的操作。基本指令有:ADD(求和)、SUB(求减)、AND(求与)等。指令语句分为:传送指令、算术运算指令、逻辑运算指令、移位指令、转移指令和处理机控制指令等类型。
  (2) 伪指令语句:汇编程序在汇编源程序时完成的某些工作:比如给变量分配存储单元地址,给符号赋值等;伪指令语句和指令语句的区别:伪指令语句经过汇编不会产生机器代码,而指令语句汇编后会产生机器代码,而且伪指令语句所指示的操作在源程序被汇编时完成,但是指令语句的操作必须在程序运行时完成;
  (3 )宏指令语句:定义:多次重复使用的程序段,使用宏名就引用了它所对应的程序,宏指令语句就是宏的引用。     
 2 汇编程序:
这部分主要是汇编程序的功能和基本工作,功能:将用汇编语言编写的汇编源程序翻译成机器指令程序。基本工作:将每一条可执行汇编语言转换成对应的机器指令、处理源程序的伪指令。这里要注意汇编程序需要扫描俩次源程序才能翻译成功。第一次主要工作定义符号的值并创建一个符号表ST,ST记录了汇编时遇到的符号的值。这里需要注意一个LC(位置计数器或者单元地址计算器),一般初始值为0,内容就是下一条被汇编的指令的偏移地址。第二次任务是产生目标程序,可执行的汇编语句被翻译成对应的二进制代码机器指令,一共分为俩个方面:一是把机器指令助记符转换成二进制的机器指令的操作码,通过查找机器指令表MOT2来实现;二是求出操作区各操作数的值。
  二编译原理:这部分分为过程和文法,文法的应用范围很广,贯穿了编译阶段的始终,因为文法就是对符号的操作,二编译就是把符号编写成一些二进制的机器指令,产生目标代码,供机器执行。
  1 过程:词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成。
    (1)词法分析阶段:对源程序从前到后逐个字符地扫描,识别出一个个“单词”符号,“单词”符号是程序设计语言的基本语法单位。词法分析过程依据的是语言的词法规则,即描述“单词”结构的规则。
    (2)语法分析:根据语言的语法规则将单词符号序列分解成各类的语法单位,如“表达式”、“语句”等,语法规则是各类语法单位的构成规则。这个阶段能确定整个输入串是否能构成一个语法上正确的程序。词法和语法分析本质上都是对源程序的结构进行分析。
    (3)语义分析:程序设计语言的语义分为静态和动态语义,分析各语法结构的含义,检查源程序是否包含静态语义错误,并收集类型信息供后面的代码生成阶段使用,主要是进行类型分析和检查。程序设计语言的一个数据类型包括类型的载体和其上的运算。
    (4)中间代码生成:根据语义分析输出生成中间代码。中间代码是简单且含义明确的记号系统,最常用的表现形式四元式与汇编语言指令的三地址码类似。
    (5)代码优化:因为编译器将源程序翻译成中间代码的工作是机械的、按照固定模式进行的,在时间和空间上有较大浪费,需要尽心优化。
    (6)目标代码生成:把之间代码变换成特定机器上的绝对指令代码、可重定位的指令代码或汇编代码,与具体机器密切相关。
   2 文法:
       文法定义:语言语法结构的形式规则。一共分为:0、1、2、3四类文法。(1)词法分析阶段用到了3型文法即正则表达式,这里涉及到了有限自动机和无限自动机和正则表达式的转换,这俩者构造了词法生成器。(2)语法分析阶段用到了2型文法即上下文无关文法,分为规范推导,短语、直接短语和句柄俩种产生式的描述形式。这个阶段还包括自顶向下的语法分析方法和自底向上语法分析方法。(3)语义分析和中间代码生成阶段采用了属性文法,这是3型文法的扩充文法,常用的中间代码有后缀式、三元式、四元式、树等形式。(4)中间代码优化和目标代码生成阶段,这里要了解俩个概念:等价:不改变程序的运行结果,有效:目标代码的运行时间较短,占用的存储空间较少。中间代码中树与后缀式适用于解释器,四元式适用于编译器。目标代码分为:汇编语言形式和机器指令形式。
  三:解释原理:主要了解基本结构和与编译原理的区别。
    1 基本结构:分为俩部分:分析部分和解释部分,分析部分通常包括词法、语法和语义分析,然后形成中间代码用后缀式表示;解释部分对分析部分产生的中间代码进行解释执行。这里应该了解一个程序计数器PC,它记录了当前正在执行的中间代码的位置。
    2 与编译原理的区别:主要区别:编译器产生目标程序,解释器不产生源程序的目标程序,只执行中间代码。其他区别包括:效率:编译比解释方式可能取得更高的效率;灵活性:解释器比编译器更灵活,因为解释程序需要反复检查源程序;可移植性:解释器进行重新编译,可以运行在不同的环境。

总结

        这部分难点和考点在于文法以及编译与解释的过程和区别。文法详细的学习和总结将会在后续博客中更新,希望读者不要受它的影响,同时文法只是一个规则,我们懂一个大概的原则和概念就可以了。


  
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值