2024软件设计师备考讲义——(3)

程序设计语言

一、程序语言基础

1.基本概念

  • 低级语言:机器语言、汇编语言
  • 高级语言:
    • Fortran 科学计算,执行效率高
    • Pascal 为教学开发,表达能力强
    • Prolog 逻辑性程序设计语言
    • C语言 指针操作能力强,可以开发系统级软件,高效
    • C++ 面向对象,高效
    • Java 面向对象,中间代码,跨平台
    • C# 面向对象,中间代码,.net架构
    • Python 面向对象解释型语言

2.分类

  • 命令式和结构化:Fortran、Pascal、C
  • 面向对象:C++、Java、C#、Python、Smarttalk
  • 函数式:Scala、LISP、APL、Haskell、Scheme
  • 逻辑性:Prolog

3.成分

  • (1)数据成分:数据类型、变量、常量、全局/局部变量
  • (2)运算成分:运算符
  • (3)控制成分:顺序结构、选择结构、循环结构
  • (4)传输成分:允许数据传输的方式,如赋值处理、输入输出等
  • (5)函数:函数首部、函数体
    • 值调用:传递值
    • 引用调用:传递引用

二、语言处理程序

1.编译程序原理

  • 词法分析:读取源程序的字符流
  • 语法分析:输入的是记号流
  • 语义分析
  • 中间代码生成
    • 前缀表达式+ab、中缀表达式a+b、后缀表达式ab+
  • 代码优化
  • 目标代码生成

2.文法

字母表、字符、字符串集合及运算

  • 字母表∑ = {a,b} a和b是字符

  • 字符串的长度 |abc| = 3

  • 空串ε

  • 连接 字符串S和T的连接表示为S·T,连接号可省略

  • 是指包括ε在内的所有字符串任意组合 ∑={a,b} , ∑={aa,bb,ab,ba,aaa...}

  • 字符串的方幂,把字符串a自身连接n次得到的串,成为a的n次方幂

  • 字符串集合运算

    • 或(合并):A∪B = {α|α∈A或α∈B}
    • 积(连接):AB={αβ|α∈A且β∈B}
    • 幂:A的n次幂=A*A^(n-1) n>0 并规定A^0 = {ε}
    • 正则闭包+:A+ = A^1∪A^2∪A^3∪A^n∪.... 不包含空串ε
    • 闭包*:A* = A^0∪A+
  • 文法G是一个四元组,G=(V,T,P,S)

    • V 非终结符 不是语言的组成部分,不是最终结果,可以推导其他元素
    • T 终结符 是语言的组成部分,是最终结果,不能再推导其他元素
    • S 起始符 是语言的开始符号
    • P 产生式 用终结符代替非终结符的规则,a->b
  • 乔姆斯基文法分类

    • 0型文法:短语文法
    • 1型文法:上下文有关文法
    • 2型文法:上下文无关文法
    • 3型文法:等价于正规式

3.正规式

正规式 正规集
ab 字符串ab构成的集合
a丨b 字符串a、b构成的集合
a* 由0个或者多个a构成的字符串集合
(a丨b)* 所有字符a和b构成的串的集合
a(a丨b)* 以a为首字符的a、b字符串的集合
(a丨b)*abb 以abb结尾的a、b字符串的集合

4.有限自动机

  • 是一个识别装置的抽象概念,能准确识别正规集
  • 分为确定有限自动机DFA和不确定有限自动机NFA
  • 输入一个字符能得出唯一后继就是DFA,得出多个后继则是NFA

5.语法分析方法

  • 自上而下的语法分析:从左到右,递归下降的思想

    复制代码
    给定文法G和源程序串r,从G的开始符号出发,
    反复使用产生式对句型中的非终结符进行替换(推导),
    逐步推导除r
  • 自下而上的语法分析:从右往左,移进-规约的思想

    复制代码
    从给定的输入串r开始,
    不断寻找字串与文法G中某个产生式的候选式进行匹配,
    并用产生式的左部代替(规约)之,逐步规约到开始符号
相关推荐
柒月的猫2 小时前
方格分割(蓝桥杯2017年试题D)
职场和发展·蓝桥杯
柒月的猫4 小时前
翻转(蓝桥杯2023大学C组试题E)
职场和发展·蓝桥杯
chenziang17 小时前
leetcode hot100
算法·leetcode·职场和发展
互联网杂货铺8 小时前
单元测试/系统测试/集成测试知识总结
自动化测试·软件测试·测试工具·职场和发展·单元测试·测试用例·集成测试
蹉跎x10 小时前
力扣1358. 包含所有三种字符的子字符串数目
数据结构·算法·leetcode·职场和发展
m0_6759882315 小时前
Leetcode3218. 切蛋糕的最小总开销 I
c++·算法·leetcode·职场和发展
黑客老陈17 小时前
面试经验分享 | 北京渗透测试岗位
运维·服务器·经验分享·安全·web安全·面试·职场和发展
测试杂货铺1 天前
Jmeter压测实战:Jmeter二次开发之自定义函数
自动化测试·软件测试·测试工具·jmeter·职场和发展·测试用例·压力测试