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中某个产生式的候选式进行匹配,
    并用产生式的左部代替(规约)之,逐步规约到开始符号
相关推荐
一叶祇秋11 小时前
Leetcode - 周赛417
算法·leetcode·职场和发展
邵泽明13 小时前
面试知识储备-多线程
java·面试·职场和发展
戊子仲秋13 小时前
【LeetCode】每日一题 2024_10_2 准时到达的列车最小时速(二分答案)
算法·leetcode·职场和发展
夜流冰14 小时前
工具方法 - 面试中回答问题的技巧
面试·职场和发展
penguin_bark15 小时前
LCR 068. 搜索插入位置
算法·leetcode·职场和发展
我命由我123451 天前
SSL 协议(HTTPS 协议的关键)
网络·经验分享·笔记·学习·https·ssl·学习方法
希望有朝一日能如愿以偿1 天前
力扣题解(飞机座位分配概率)
算法·leetcode·职场和发展
@qike1 天前
【C++】—— 日期类的实现
c语言·c++·笔记·算法·学习方法
SZPU领跑2 天前
第十二届蓝桥杯嵌入式省赛程序设计题解析(基于HAL库)(第一套)
stm32·单片机·算法·职场和发展·蓝桥杯
小迷糊糊NWCX2 天前
【JAVA面试】关于接口
面试·职场和发展