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中某个产生式的候选式进行匹配,
    并用产生式的左部代替(规约)之,逐步规约到开始符号
相关推荐
考试宝1 小时前
国家宠物美容师职业技能等级评价(高级)理论考试题
经验分享·笔记·职场和发展·学习方法·业界资讯·宠物
面试鸭3 小时前
离谱!买个人信息买到网安公司头上???
java·开发语言·职场和发展
测试19985 小时前
2024软件测试面试热点问题
自动化测试·软件测试·python·测试工具·面试·职场和发展·压力测试
准橙考典6 小时前
怎么能更好的通过驾考呢?
人工智能·笔记·自动驾驶·汽车·学习方法
程序员勋勋8 小时前
【自动化测试】如何在jenkins中搭建allure
职场和发展·jenkins·测试覆盖率
咕咕吖8 小时前
对称二叉树(力扣101)
算法·leetcode·职场和发展
sszmvb12349 小时前
测试开发 | 电商业务性能测试: Jmeter 参数化功能实现注册登录的数据驱动
jmeter·面试·职场和发展
测试杂货铺9 小时前
外包干了2年,快要废了。。
自动化测试·软件测试·python·功能测试·测试工具·面试·职场和发展
测试界萧萧10 小时前
外包干了4年,技术退步太明显了。。。。。
自动化测试·软件测试·功能测试·程序人生·面试·职场和发展
小码哥说测试11 小时前
接口测试用例设计的关键步骤与技巧解析!
自动化测试·测试工具·jmeter·职场和发展·测试用例·接口测试·postman