目 录CONTENT

文章目录

程序语言设计

lionkliu
2022-09-24 / 0 评论 / 0 点赞 / 34 阅读 / 1,826 字

考点概况

程序设计语言概念、编译与解释、文法分析、正则式、有限自动机、后缀表达式、传值与传址、多种程序语言特点

1、程序设计语言基本概念

1.1 低级语言和高级语言

mg

  • 低级语言:汇编
  • 高级语言:Java、C、C++、PHP、Python、Delphi、PASCAL等

1.2 编译程序和解释程序

img

翻译形式:汇编、解释、编译

img

1.3 程序设计语言分类

  • 过程式(命令式和结构化):FORTRAN、Pascal、C
  • 面向对象:Simula、Smalltalk、C++、Objective C、Java、Python
  • 函数式:lisp、python、scala
  • 逻辑型:Prolog
  • 脚本语言:shell、bat、js、python

1.4 真题

img

img

img

img

2、程序设计语言的基本成分

程序设计语言的基本成分包括数据、运算、控制和传输等。

  • 运算:算术式运算、关系运算、逻辑运算

  • 控制:顺序结构、选择结构、循环结构

2.1 数据

img

img

数据类型作用:

  • 便于为数据合理分配存储单元
  • 便于对参与表达式计算的数据对象进行检查
  • 便于规定数据对象的取值范围及能够进行的运算

类型转换:

  • 隐式类型转换:根据数据类型从小到大的转换,byte→short→int→long
int a =4; 
float b= 5.56;
b =a; //这个就是隐式转换,默认的把int a 类型的 转换为float的类型.
  • 显示类型转换:当系统默认转换不能转换的时候,而我们又需要把某一类型改为另一个类型,这个过程我们称之为显示转换也叫做强制转换。
int a =4; 
float b= 5.56;
float c =(float)a;//把int类型的a,强制转换为float类型的。

2.2 运算

image-20220925153420304

短路运算是当有多个表达式时,左边的表达式的值可以确定结果就不用再计算右边表达式的值了

2.3 控制

img

image-20220925153754516

2.4 传输

image-20220925153654465

2.5 真题

img

img

img

img

img

img

img

img

  • 左结合:从左往右运算,右结合:从右往左运算

img

img

2.6、函数

imgimg

2.7 真题

img

img

img

img

img

img

img

img

img

img

img

img

img

img

img

img

3、编译和解释程序翻译阶段

3.1 过程分析

image-20221011141051471

① 词法分析

  • 输入源程序,输出记号流
  • 作用:分析构成程序的字符以及由字符按照构造规则构成的符号是否符合程序语言的规范

② 语法分析

  • 输入记号流,输出,语法树(分析树)
  • 作用:对各条语句进行合法分析,分析程序句子结构是否正确

③ 语义分析

  • 输入语法树
  • 作用:进行类型分析和检测

④ 中间代码

  • 常见的由后缀是、三地址码、三元式、四元式和树/图等形式
  • 中间代码与具体的机器无关(不依赖于具体的机器),可以跨平台,提高了移植性,利于与机器无关的优化
  • 作用:可以将不同的高级编程语言翻译成同一种中间代码

考点:

  • 语法分析可以发现所有语法错误,语义分析不能发现所有语义错误
  • 语义分析只能发现静态错误,动态错误只能在运行时发现

⑥ 目标代码生成

  • 其与具体的机器密切相关
  • 寄存器的分配处于目标代码生成阶段

img

img

img

img

img

img

3.2 符号表

imgimg

img

img

img

3.3 词法分析

imgimgimg

3.4 语法分析

imgimg

语法分析阶段可以发现程序中所有的语法错误

3.5 语义分析

img

img

有语义错误是可以编译成功的,例如a/0;这是符合语法的,也符合静态语义,编译器检验不出来这个是错的,只有运行才会报错,也就是动态语义,动态语义错误常见的有死循环

3.6 目标代码的生成

imgimg

3.7 中间代码

imgimg

3.8 真题

img

img

img

img

img

img

img

img

img

img

img

img

img

img

有语义错误是可以编译成功的,例如a/0;这是符合语法的,也符合静态语义,编译器检验不出来这个是错的,只有运行才会报错,也就是动态语义

img

img

img

img

img

img

img

img

img

4、正规式

img

词法分析的工具

  • |:选择,只能选择一个,不能全部出现
  • *:闭包,出现0次或多次

img

img

img

img

img

有点难度这题

5、有限自动机

有限自动机是词法分析的一个工具,它能正确地识别正规集

  • 确定的有限自动机(DFA):对每一个状态来说识别字符后转移的状态是唯一的
  • 不确定的有限自动机(NFA):对每一个状态来说识别字符后转移的状态是不唯一的
  • 每个圈都是一个状态

image-20221011150906514

一个状态即可以是初态,也可以是终态

  • 串识别成功的依据是路跑的通并且跑完后的终点是终态

img

这上面的这个亲嘴的符号是表示空的意思,就不用识别直接跳

img

这上面的这个a,b是a或b的意思

确定和不确定有限自动机的区别在于给一个字符它只有一条路可以跑,那就是确定,反之是不确定,例如上面的图给个a,它很明显有两条路可以跑,所以是不确定有限自动机

img

img

img

img

img

img

img

有点东西

img

img

img

img

img

img

解题方法:将题目的状态图可以识别的串写出来与答案的图比较

img

img

img

img

img

image-20221011154632220

6、上下文无关文法

image-20221011154814820

img

img

先把上下文无关法的表达式写出来,然后再做题

img

img

img

imgimg

img

img

img

7、中缀、后缀表达式及转换

img

这里知道后缀式是把符号为放在最后并且最为一个新的整体替换原来的a?b,知道中缀怎么和后缀互转就行,注意优先级相同时是从右到左,后缀转中缀用到了栈

img

img

逆波兰式其实就是后缀式

img

img

img

img

img

算术表达式对应的是中序遍历

img

后缀形式就是对应的后序遍历

img

img

img

8、杂题

img

img

img

img

img

img

img

img

img

img

img

img

img

img

img

img

img

img

img

img

img

img

img

img

img

img

img

0

评论区

// // // //