软件设计师-08,程序设计语言基础知识

程序设计语言概述、语言处理程序基础

NULL

考纲


image-20230922210720460

程序语言概述


程序设计语言的基本概念
  • 程序设计语言是为了书写计算机程序而人为设计的符号语言,用于对计算过程进行描述、组织和推导。

  • 低级语言:机器语言(计算机硬件只能识别0和1的指令序列),汇编语言。

  • 高级语言:功能更强,抽象级别更高与人得使用的自然语言比较接近

image-20230922212109523
  • 解释和编译:都是将高级语言翻译成计算机硬件认可的机器语言加以执行。不同之处在于编译程序生成独立的可执行文件,直接运行,运行时无法控制源程序,效率高。而解释程序不生成可执行文件,可以逐条解释执行,用于调试模式,可以控制源程序,因为还需要控制程序,因此执行速度慢效率低。

  • 程序设计语言组成:

    语法(一组规则)、语义(语法成分的含义)、语用(构成语言的各个记号和使用者的关系)。

image-20230922212519739


程序设计语言中的基本成分
  • 数据成分:指一种程序设计语言的数据和数据类型。数据分为常量(程序运行时不可改变)、变量(程序运行时可以改变)、全局量(存储空间在静态数据区分配)、局部量(存储空间在堆栈区分配)。数据类型有整型、字符型、双精度、单精度浮点型、布尔型等。

  • 运算成分:指明允许使用的运算符号及运算规则。包括算术运算、逻辑运算、关系运算、位运算等

  • 控制成分:指明语言允许表述的控制结构。包括顺序结构、选择结构、循环结构(初始化+循环体+循环条件)。

image-20230922212752526
  • 传输成分:指明语言允许的数据传输方式。如赋值处理、数据的输入输出等。

  • 函数:C程序由一个或多个函数组成,每个函数都一个名字,其中有且仅有一个名字为main的函数作为程序运行时的起点。函数是程序模块的主要成分,是一段具有独立功能的程序。函数使用涉及三个概念:函数定义、函数声明(先声明后使用)、函数调用。

    image-20230922213020054

  • 传值调用:将实参的值传递给形参,形参的改变不会导致调用点所传的实参的值改变。实参可以是合法的变量、常量和表达式。

  • 传址调用:即引用调用,将实参的地址传递给形参,即相当于实参存储单元的地址引用,因此其值改变的同时就改变了实参的值。实参不能为常量,只能是合法的变量和表达式。

  • 因此,在编程时,要改变参数值,就传址,不改变,就传值。

image-20230922213200647

语言处理程序基础


编译程序基本原理

编译程序的功能是把某高级语言书写的源程序翻译成与之等价的目标程序(汇编语言或机器语言)。编译程序工作过程分为6个阶段,如下图所示:

image-20230922213350196
  • 词法分析:是编译过程的第一个阶段。这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单词符号或符号)。

  • 语法分析:是编译过程的一个逻辑阶段。语法分析的任务是在词法分析的基础上将单词序列组合成各类语法短语,如“程序”,“语句”,“表达式”等等.语法分析程序判断源程序在结构上是否正确

  • 语义分析:是编译过程的一个逻辑阶段.语义分析的任务是对结构上正确的源程序进行上下文有关性质的审查,进行类型审查。如类型匹配、除法除数不为0等。文分为静态语义错误(在编译阶段能够查找出来)和动态语义错误(只能在运行时发现)。

  • 中间代码和自标代码生成:中间代码是根据语义分析产生的,需要经过优化链接,最终生成可执行的自标代码。引入中间代码的自的是进行与机器无关的代码优化处理。常用的中间代码有后缀式(逆波兰式)、三元式(三地址码)、四元式和树等形式。需要考虑三个问题(一是如何生成较短的自标代码:二是如何充分利用计算机中的寄存器,减少自标代码访问存储单元的次数:三是如何充分利用计算机指令系统的特点,以提高目标代码的质量)。

image-20230922214538822

image-20230922214634987
  • 主要掌握上述三种表达式即可,其实就是树的三种遍历,一般正常的表达式是中序遍历即中缀表达式,根据其构造出树,再按题自要求求出前缀或后缀式

  • 简单求法:后缀表达式是从左到右开始,先把表达式加上括号,再依次把运算符加到本层次的括号后面。

image-20230922214905148


文法定义
image-20230922214930750
  • 终结符:最终结果,不能推导出其他元素。

  • 非终结符:能够推导出其他元素。

  • 产生式:即非终结符推导出终结符的公式。

  • 闭包,概念如下图,一般考察闭包可以为0个的情况代入运算:

image-20230922215015592
  • 例题

    image-20230922215529810

    • 我们可以将A→S1 | 1B→S0 | 0代入文法G:S→A0 | B1


文法类型
image-20230922215601922
  • 1型语法:常出现在语义分析

  • 2型语法:常出现在语法分析

image-20230922215736509
正规式
image-20230922215807095

image-20230923191954365


有限自动机
image-20230923192148913 image-20230923192208414
  • 主要有五个符号集,由上图示例,可知用状态来表示十分清晰,由S输入一个0,可得出B,依次类推,一般考试,给出一个状态图,问能否构造出001这样的字符串,解决方法就是从起始S到终点f之间是否有一条路,权值为001。本质就是有向图从起点到终点的遍历。

  • 确定的有限自动机和不确定的有限自动机:输入一个字符,看是否能得出唯一的后继,若能,则是确定的,否则若得出多个后继则是不确定的。

image-20230923192507751


语法分析方法
  • 自上而下语法分析:最左推导,从左全右。给定文法G和源程序串r。从G的开始符号S出发,通过反复使用产生式对句型中的非终结符进行替换(推导),逐步推导出r。

  • 递归下降思想:原理是利用函数之间的递归调用模拟语法树自上而下的构造过程,是一种自上而下的语法分析方法。

  • 自下而上语法分析:最右推导,从右至左。从给定的输入串开始,不断寻找子串与文法G中某个产生式P的候选式进行匹配,并用P的左部代替(归约)之,逐步归约到开始符号S。

  • 移进-规约思想:设置一个栈,将输入符号逐个移进栈中,栈顶形成桌产生式的右部时,就用左部去代替,称为归约。很明显,这个思想是通过右部来推导出左部,因此是自下而上语法分析的核心思想。

image-20230923193033904