软考程序设计语言笔记

程序设计语言

  • 程序设计语言的基本概念
  • 程序设计语言的控制成分
  • 传值调用与传地址调用
  • 编译,解释程序翻译阶段
  • 符号表
    • 词法分析
    • 语法分析
    • 语义分析
    • 目标代码生成
    • 动态的语义错误(判断运行后的错误)
    • 中间代码生成
  • 正规式
  • 有限自动机
  • 上下文无关文法
  • 中缀,后缀表达式转换
  • 语法树中,后序遍历

程序设计语言的基本概念

软考程序设计语言笔记_第1张图片
编译程序生成目标程序,但不参与程序运行当中
解释程序不生成目标程序,但参与程序运行中

程序设计语言的控制成分

软考程序设计语言笔记_第2张图片

软考程序设计语言笔记_第3张图片

b解释意思就是如果用布尔型与整形相乘或者计算 程序会报错
动态数据结构定义不了数据类型,因为数据类型是定义好的。而且动态数据类型是可变的

传值调用与传地址调用

软考程序设计语言笔记_第4张图片

值调用只是传的一个值,比如int n=1只是把1传过去,而不是地址 所以不能更改。
引用调用他是直接取地址,修改形参,实参的值不会变的,因为是同一个地址
软考程序设计语言笔记_第5张图片

编译,解释程序翻译阶段

高级语言通过编译和解释可以变成机器可以识别的语言,下面主要是编译器内容
软考程序设计语言笔记_第6张图片
软考程序设计语言笔记_第7张图片

符号表

软考程序设计语言笔记_第8张图片

声明语句主要将符号传入符号表1

软考程序设计语言笔记_第9张图片

词法分析

词法分析的输入是源程序 输出是记号流、、
软考程序设计语言笔记_第10张图片

语法分析

输入是上一个词法分析的记号流。输出是语法树或者称之为分析树

它的作用是判断语法是否正确比如int a=10, 这个逗号就不正确

软考程序设计语言笔记_第11张图片

语义分析

类型检查,判断左右两边类型是否相符合

软考程序设计语言笔记_第12张图片

目标代码生成

软考程序设计语言笔记_第13张图片


软考程序设计语言笔记_第14张图片


语法分析一般考虑结构是否正确

软考程序设计语言笔记_第15张图片

b语义阶段可以确定后面这个是否正确,int a =“abc”

c可以确定循环语句结构正确否


动态的语义错误(判断运行后的错误)

软考程序设计语言笔记_第16张图片

上图可以过静态的语义,,因为他符合语义和语法规则,但是过不了动态的语义


软考程序设计语言笔记_第17张图片
软考程序设计语言笔记_第18张图片
比如这个 在运行后才检查除错误。得出语义错误确实只能在运行后发现

中间代码生成

软考程序设计语言笔记_第19张图片

正规式

正规集由正规式推出
软考程序设计语言笔记_第20张图片
星号表示闭包:出现0次或者多次
**星号一般是就近原则,左边最近的第一个 **

有限自动机

初态一个圆圈并且由箭头指向自己,终态是两个圆圈,并且可以存在多个终态
软考程序设计语言笔记_第21张图片
AB两个选项,a进去第一个1正常识别进入q1到了第二个1识别失败,因为不能连续识别两个
B选项识别一个0回到q0,第二个1进入q1第三个数识别0再回到q0,然后第四个数识别1进入q1

在这里插入图片描述
软考程序设计语言笔记_第22张图片
上图就是nfa因为他的1可以转移到s1还可以s0


a,b意思就是a|b,a或者b
软考程序设计语言笔记_第23张图片


下图反过来3这个字符 意思是识别空的意思,意思是你可以什么都不干直接转移·

上下文无关文法

大多数程序设计语言都是用上下文无关文法

->这个符号可以表示成变成什么

软考程序设计语言笔记_第24张图片
软考程序设计语言笔记_第25张图片

软考程序设计语言笔记_第26张图片

软考程序设计语言笔记_第27张图片
圈起来的是这道题能推出来的

d解释,不能往下继续了就是终结符号所以是对的

中缀,后缀表达式转换

后缀是中间代码常用的一种公式

中缀是一种常见的表达式比如1+2这样,后缀式是把符号放在后面12+。 中缀式一般喜欢用a?b , ?表示加减乘除。ab?这样转换后这就是一个整体
在这里插入图片描述
后缀转中缀需要用到栈,从左向右一次识别放入,如果遇到符号需要用到a?b,符号当作问好,他是ab?这样的形式把他变成a?b就行

语法树中,后序遍历

软考程序设计语言笔记_第28张图片

中序遍历求出中缀式,后序遍历求出后缀式

中缀式是左根右 所以由上图得出1+2
软考程序设计语言笔记_第29张图片
后序遍历是用左右根

软考程序设计语言笔记_第30张图片

得出的放在左右
软考程序设计语言笔记_第31张图片
软考程序设计语言笔记_第32张图片

你可能感兴趣的:(程序设计语言,开发语言)