软件设计师2.程序设计语言基础

1程序设计语言

  • 低级语言
    • 机器语言:二进制代码表示的机器指令的集合,灵活,直接执行,速度快
    • 汇编语言:一种助记符表示的面向机器的语言
      • 汇编程序:翻译程序
        • 输入:用汇编语言书写源程序
        • 输出:用机器语言表示的目标程序
      • 汇编程序语言
        • 指令语言
        • 伪指令语言
        • 宏指令语言
  • 高级语言:相对于汇编语言而言
    • 命令式语言:语义基础模拟“数据存储/数据操作”c,c++,java,basic,c#
    • 函数式语言:基于数学函数概念“LIsp,F#,”
    • 逻辑式语言:Prolog
    • 面向对象语言

2 常见数据类型

  • 基本类型:int,char,实型float/double,bool
  • 特殊类型:空类型void
  • 用户定义类型:枚举类型enum
  • 构造类型:数组,结构,联合
  • 抽象数类型:类

3 程序结构(顺序,选择,循环结构)

4 汇编语言

4.1 指令语句

  1. 指令语句:机器指令语句,汇编后产生的相应的机器代码
    指令语句:传送,算术运算,逻辑运算,移位指令和处理机控制指令等
  2. 伪指令语句:指示汇编程序汇编源程序时完成某些工作。
    如:为变量分配存储单元,给某个符号赋值等
  3. 宏指令语言:宏的引用
    宏:即为可重复使用的程序段,类似于函数

4.2 解释程序,编译程序

  • 解释程序(解释器):直接解释执行源程序,或将其翻译为中间代码后执行
    解释方式下,解释程序与源程序(或某种等价表示)要参与到程序的运行过程中,运行程序的控制权在解释程序

  • 编译程序(编译器):将源程序翻译成目标语言再在计算机上运行目标程序
    编译方式下,机器上运行的是与源程序等价的目标程序,源程序与编译程序都不再参与目标程序的执行过程

  • 区别:解释方式,翻译程序不生成独立的目标程序,而编译方式则生成独立保持的目标程序

对比

  1. 效率. 编译比解释方式可能取得更高的效率。一般情况下, 在解释方式
    下运行程序时, 解释程序可能需要反复扫描源程序. 例如:每一次引用变量
    都要进行类型检查, 甚至需要重新进行存储分配, 从而降低了程序的运行速
    度. 在空间上,以解释方式运行程序需要更多的内存, 因为系统不但需要为用
    户程序分配运行空间, 而且要为解释程序及其支撑系统分配空间.
  2. 灵活性. 解释方式比编译方式更灵活。解释程序需要检查源程序, 当解
    释器直接运行源程序时, 在运行中, 修改程序成为可能, 例如 增加语句或修
    改错误等
  3. 移植性.源程序若由解释器控制运行的, 而已提前将解释器安装在不同的
    机器上, 从而使在新环境下无需修改源程序使之运行. 在编译方式下则需要
    针对新机器重新生成源程序的目标代码才能运行.

5 编译程序基本原理

在这里插入图片描述

  1. 词法分析:编译过程的第一阶段,这个阶段的任务是对源程序从前到后(从左到右)逐个字符地扫描,从中识别出一个个“单词”
  2. 语法分析:在词法分析的基础上,根据语言的语法规则,把单词符号串分解成各类单位,如“短语”、“句子”、“程序段”和“程序”。通过语法分解,确定整个输入串是否构成一个语法上正确的程序
  3. 语义分析:检查源程序是否包含语义错误,并搜集类型,供后面的代码生成阶段使用,只有语法和语义正确的源程序才可被翻译成目标代码。语义分析程序需要进行频繁的造表和查表工作。语义分析的一个重要内容是类型检查,对表达式及语句中的各种语法分作类型检查和分析
  4. 中间代码生成阶段:根据语义分析的输出生成中间代码. 它是一种简单且含义明确的记号系统, 他们的共同特征是与 机器无关. 中间代码的设计原则: 一是容易生成, 二是容易被翻译成目标代码. 语义分析和中间代码生成所依据的是语言的语义规则.
  5. 代码优化阶段:由于编译器将源程序翻译成中间代码的工作是机械的, 因此, 生成中间代码往往在计算时间上和存储空间上有很大的浪费. 优化过程可以在中间代码生成阶段进行, 也可以在目标代码生成阶段进行. 优化所依据的原则是程序的等价变换规则.
  6. 目标代码生成阶段:这一阶段的任务是把中间代码变换成特定机器上的绝对指令代码、可重定位的指令代码或汇编指令代码, 这个阶段的工作与具体的机器密切相关.
  7. 错误
    1. 词法错误:非法字符,关键字或标识符拼写错误
    2. 语法错误:语法结构出错,if…end if 不匹配,缺分号
    3. 语义错误:死循环,零除数,其它逻辑错误(程序run的时候出现)

6 文法

以有穷的集合描述无穷的计划的工具

7 语法推导树

在这里插入图片描述

8 有限自动机

在这里插入图片描述
例题
在这里插入图片描述

9 文法推导与正规式

在这里插入图片描述

10 表达式

  • 前缀表达式(+ab)
  • 中缀表达式(a+b)
  • 后缀表达式(逆波兰表达式ab+)

1)转换方法

其实就是以符号为根的树结构
前序遍历,中序遍历,后序遍历

2)后缀表达式计算方法

后缀表达式的计算方法:
从左向右,每遇到一个运算符,就将前两个数字进
行该运算,再将运算结果放到该位置
比如刚才的后缀表达式:8 3 2 6 * + 5 / - 2 2 ^ +

  1. 第一步*运算:8 3 12 + 5 / - 2 2 ^ +
  2. 第二步+运算:8 15 5 / - 2 2 ^ +
  3. 第三步/运算:8 3 - 2 2 ^ +
  4. 第四步:5 2 2 ^ +
  5. 第五步:5 4 +
  6. 第六步:9

11 函数调用,传值与传址

  • 传值:把实参的值赋给实参,相当于copy
  • 传址:传递的地址,传之后,实参和形参都会指向同一个对象

12 各个语言特点

发布了90 篇原创文章 · 获赞 4 · 访问量 1426

猜你喜欢

转载自blog.csdn.net/weixin_44145258/article/details/103985352