程序设计语言编译原理_编译原理学习笔记(二):高级程序设计语言

高级程序设计语言

一、语言概述

1.1 语法 v.s. 语义

  • 程序本质上是一定字符集上的字符串
  • 语法:一组规则,用它可以形成和产生一个合式(well-formed)的程序
    • 定义了程序的形式结构
    • 定义语法单位的意义属于语义问题

e3d2be93d954ca3490cb274649190e69.png
  • 语义:一组规则,定义一个程序的意义
    • 例如 “关于函数调用时参数传递方法的描述” 属于语义定义

1.2 作用域

  • 同一个标识符在不同过程中代表不同的名字
  • 作用域:一个名字能被使用的区域范围
  • 规则:“最近嵌套原则”

40b46bee6d79c4b654369cbc0e94180b.png

1.3 标识符 v.s. 名字

标识符是语法概念,名字是语义概念。

「标识符」

  • 以字母开头的,由字母数字组成的字符串

「名字」

  • 含义:标识程序中的对象
  • 意义和属性:
    • 值:单元中的内容
    • 属性:类型和作用域
  • 说明方式
    • 说明语句明确规定
      • int score
    • 隐含说明
      • FORTRAN 以 I,J,K,...,N 为首的名字代表整型,否则为实型
    • 动态确定
      • 走到哪里,是什么,算什么
  • 名字的绑定
    • 名字的绑定是指将标识符与所代表的程序数据或代码进行关联
    • 静态绑定:发生在编译过程中,如变量声明、类型定义、函数定义
    • 动态绑定:发生在运行过程中,如多态、虚函数

「二者区别」

  • 标识符是语法概念
  • 名字有确切的意义和属性

1.4 左值与右值

赋值语句:A := B

  • 名字的左值:该名字代表的存储单元的地址
  • 名字的右值:该名字代表的存储单元的内容

「简单判断」

  • 出现在赋值号左边的值必须具有左值,出现在赋值号右边的值则必须具有右值。

二、语法描述

2.1 基本概念

  • **字母表:**一个有穷字符集,记为
    equation?tex=%5Csum
  • **字符:**字母表中每个元素
  • 字 / 字符串:
    equation?tex=%5Csum 上的字(也叫字符串)是指由
    equation?tex=%5Csum 中的字符所构成的一个有穷序列
  • **空字:**不包含任何字符的序列,记做
    equation?tex=%5Cvarepsilon
    • 空字是字符串,不是字符
  • 字的全体:
    equation?tex=%5Csum%5E%2A 表示
    equation?tex=%5Csum 上的所有字的全体,包含空字

2bfac6d442f5dc4645732ba789fff4e3.png
  • 子集连接(积):
    • equation?tex=%5Csum%5E%2A 的子集 U 和 V 的连接(积)定义为

equation?tex=UV%3D%5C%7B%5Calpha+%5Cbeta+%7C+%5Calpha+%5Cin+U+%5C%26+%5Cbeta+%5Cin+V%5C%7D

99f428f4a332231ed254d3672dc1bd42.png
  • n次积
    • V自身的n次积记为
      equation?tex=V%5En
    • equation?tex=V%5E0%3D%5C%7B%5Cvarepsilon%5C%7D
    • equation?tex=V%5E%2A 是 V 的闭包:
      equation?tex=V%5E%2A%3DV%5E0%5Cbigcup+V%5E1+%5Cbigcup+V%5E2+%5Cbigcup+...
    • equation?tex=V%5E%2B 是 V 的正规闭包:
      equation?tex=V%5E%2B%3DVV%5E%2A
    • 「区别」
      • equation?tex=V%5E%2A 中始终有空字,但如果V中原来没有空字,则
        equation?tex=V%5E%2B 中不会有空字

2.2 上下文无关文法

「上下文无关文法 G 的定义 - 四元组」

equation?tex=G%3D%28V_T%2CV_N%2CS%2CP%29
  • equation?tex=V_T%3A 终结符(Terminal)集合,非空
  • equation?tex=V_N%3A 非终结符(Noterminal)集合,非空,且
    equation?tex=V_T%5Cbigcap+V_N+%3D+%5Cemptyset
  • equation?tex=S%3A 文法的开始符号,
    equation?tex=S%5Cin+V_N
    • S是特殊非终结符,表示所定义的语言最终感兴趣的语法单位,如英语描述中的“句子”,程序语言描述的“程序”
  • equation?tex=P%3A 产生式集合(有限),每个产生式形式如下
    • equation?tex=P%5Crightarrow+%5Calpha%2C+P%5Cin+V_N%2C+%5Calpha+%5Cin+%28V_T+%5Cbigcup+V_N%29%5E%2A
    • equation?tex=P+%5Crightarrow+%5Calpha 表示 “P定义为
      equation?tex=%5Calpha
  • 开始符
    equation?tex=S 至少必须在某个产生式的左部出现一次

ec27d0be5eab86d62b2d7ab20e28f581.png

2.3 推导

2.3.1 基本概念

  • equation?tex=%5CRightarrow:直接推出,只能对一个非终结符推导一次
  • equation?tex=%5Crightarrow:被定义为

9eeee2740035a379550533a674c02949.png

「*推出 & +推出」

dd5a3470d7d8edd0f8962fb364b839c3.png

「概念辨析 - 句型 | 句子 | 语言」

17df477500d0019cca49214144c92d8a.png

「句型、句子推导练习」

  • 文法 => 句子

1e975ea5b4a9ea63fa71fd133caba8d3.png
  • 句子 => 文法
    • 此类题目稍微难一些,需要用递归思想来解决,优先考虑最简结构

6ac051cbf088f77c43677a29efdde02c.png

2.3.2 语法树

「最左/右推导」

97e17149b47aa74a0a36ffea85543ca9.png

「语法树」

52e4630bb5088f6f39249f75907f2bd2.png

2.3.3 二义性

「二义性举例」

c12973b5fc1badcd311eda23627058a6.png

「文法 / 语言二义性」

  • 文法二义性:文法存在某个句子对应两颗不同语法树
    • 文法二义性问题是不可判定问题,不存在一个算法,能在有限步骤中,确切地判定一个文法是否二义
    • 但仍然存在很多充分条件可以判定一个文法是非二义的
      • 例如一个文法如果属于 LR 文法,则一定不是二义文法
  • 语言二义性:存在一个能推导出该语言的无二义文法

2.4 形式语言

2.4.1 概述

  • 乔姆斯基在1956年建立形式语言体系,将文法分为四种类型:0、1、2、3型
  • 四种类型唯一区别在于产生式

6390a8425751b6c74db1c8beb67a1dc3.png
  • 0型(短语文法,图灵机)

079700b029caefd7c76984b3e828888f.png
  • 1型(上下文有关文法,线性界限自动机)

6a6c65e8456b4980689ef6eaab9da986.png
  • 2型(上下文无关文法,非确定下推自动机)

788360794b8a2639e4261263f7980b76.png
  • 3型(正规文法,有限自动机)

7da8a0f2cdfcdcd398f78ef66fcefe6c.png
    • 正规式、正规集

3bd08bd3a21191ba753de5b05a5ebf8b.png

2.4.2 文法对比

  • 四种类型文法描述能力比较

c558d335a50e577e5f8da0dec7f5341c.png
  • 上下文无关文法 v.s. 正规文法

23524a3f5db209b40c3a7b46516e1086.png
  • 上下文无关文法 v.s. 上下文有关文法

5f0760581fc5f774751b269c88beef46.png
  • 上下文无关文法的局限 - 权衡思想

bd4a3a4bd957452b49edbb1c20805e96.png
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理经典教材 目录 第一章引论 1.1什么叫编译程序 1.2编译过程概述 1.3编译程序的结构 1.3.1编译程序总框 1.3.2表格与表格管理 1.3.3出错处理 1.3.4遍 1.3.5编译前端与后端 1.4编译程序与程序设计环境 1.5编译程序的生成 第高级语言及其语法描述 2.1 程序语言的定义 2.1.1语法 2.1.2 语义 2.2 高级语言的一般特性 2.2.1 高级语言的分类 2.2.2程序结构 2.2.3数据类型与操作 2.2.4语句与控制结构 2.3程序语言的语法描述 2.3 上下文无关文法 2.3.2语法分析树与义性 2.3.3 形式语言鸟瞰 练 习 第三章词法分析 3.1 对于词法分析器的要求 3.1.1词法分析器的功能和输出形式 3.1.2词法分析器作为一个独立子程序 3.2词法分析器的设计 3.2.1输入、预处理 3.2.2 单词符号的识别:超前搜索 3.2.3状态转换图 3.2.4状态转换图的实现 3.3正规表达式与有限自动机 3.3.1正规式与正规集 3.3.2确定有限自动机(DFA) 3.3.3非确定有限自动机(NFA) 3.3.4正规文法与有限自动机的等价性 3.3.5 正规式与有限自动机的等价性 3.3.6确定有限自动机的化简 3.4词法分析器的自动产生 3.4.1语言LEX的一般描述 3.4.2超前搜索 3.4.3 LEX的实现 练 习 第四章语法分析——自上而下分析 4.1 语法分析器的功能 4.2 自上而下分析面临的问题 4.3 LL(1)分析法 4.3.1左递归的消除 4.3.2消除回溯、提左因子 4.3.3 LL(1)分析条件 4.4递归下降分析程序构造 4.5预测分析程序 4.5.1预测分析程序工作过程 4.5.2预测分析表的构造 4.6 LL(1)分析中的错误处理 练 习 第五章语法分析——自下而上分析 5.1 自下而上分析基本问题 5.1.1 归约 5.1.2规范归约简述 5.1.3符号栈的使用与语法树的表示 5.2算符优先分析 5.2.1算符优先文法及优先表构造 5.2.2算符优先分析算法 5.2.3优先函数 5.2.4算符优先分析中的出错处理 5.3LR分析法 5.3.1 LR分析器 5.3.2LR(O)项目集族和LR(O)分析表的构造 5.3.3 SLR分析表的构造 5.3.4规范LR分析表的构造 5.3.5 LALR分析表的构造 5.3.6 文法的应用 5.3.7LR分析中的出错处理 5.4语法分析器的自动产生工具YACC 练 习 第六章属性文法和语法制导翻译 6.1属性文法 6.2基于属性文法的处理方法 6.2.1 依赖图 6.2.2树遍历的属性计算方法 6.2.3 一遍扫描的处理方法 6.2.4抽象语法树 6.3 S-属性文法的自下而上计算 6.4 L-属性文法和自顶向下翻译 6.4.1 翻译模式 6.4.2自顶向下翻译 6.4.3递归下降翻译器的设计 6.5自下而上计算继承属性 6.5.1 从翻译模式中去掉嵌入在产生式中间的动作 6.5.2分析栈中的继承属性 6.5.3模拟继承属性的计算 6.5.4 用综合属性代替继承属 练 习
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值