编译原理与技术 --文法和分析 2018/9/17 《编译原理与技术》讲义.

Slides:



Advertisements
Similar presentations
認識食品標示 東吳大學衛生保健組製作.
Advertisements

十二年國民基本教育- 104年中投區適性入學宣導
第八章 互换的运用.
密云季庄小 学心理讲座 合理情绪 幸福生活 武金红 密云教研中心.
颞下颌关节常见病.
第十二章 小组评估 本章重点问题: 评估的设计 测量工具的选择和资料的收集 与分析.
致理科技大學保險金融管理系 實習月開幕暨頒獎典禮
第五章 二次型. 第五章 二次型 知识点1---二次型及其矩阵表示 二次型的基本概念 1. 线性变换与合同矩阵 2.
第6章 LR分析程序及其自动构造 6.1 自下而上分析及其LR分析概述 6.2 LR (0) 分析 6.3 SLR(1) 分析
合 同 法 主讲人: 教材:《合同法学》(崔建远) 2017/3/10.
結腸直腸腫瘤的認知.
經歷復活的愛 約翰福音廿一1-23.
第二章 文法和语言 2.1 文法的基本概念 符号和符号串 2.2 句型的分析 文法和语言的形式定义 推导与递归 文法的分类 语法树
编 译 原 理 指导教师:杨建国 二零一零年三月.
尹剑飞 科技楼 编译原理 尹剑飞 科技楼
Part I 上海土地市场.
2008年工资统计报表填报要求 及指标解释 人事教育局薪酬与社会保障处
《高等数学》(理学) 常数项级数的概念 袁安锋
编 译 原 理 指导教师:杨建国 二零一零年三月.
第二章 高级语言及其文法 School of Computer Science & Technology
“08高考化学学业水平(必修科目)测试的命题和教学对策研究”
禪宗的教外別傳.
Part5语法分析 授课:胡静.
第四章 语法分析 赵建华 南京大学计算机系
第三章 语法分析 本章内容 上下文无关文法 自上而下分析和自下而上分析 围绕分析器的自动生成展开 词 法 分析器 记 号 取下一个记号
编译原理与技术 第3章 语法分析 14学时.
民法第四章:權利主體 法人 楊智傑.
编译原理习题
语法分析在编译程序中的逻辑位置 语 法 分 析 表 处 理 源 程 序 词 法 分 析 语 义 分 析 中 间 代 码 生 成 中 间 代
强连通分量 无向图 1、任意两顶点连通称该图为连通图 2、否则将其中的极大连通子图称为连通分量 A D C B E 有向图
第6章 自底向上优先分析法 自底向上优先分析概述 简单优先分析 算符优先分析 返回目录.
编译原理与技术 词法分析(1) 2018/11/28 《编译原理与技术》讲义.
语言及其文法.
第四章 语法分析.
第二章 高级语言及其语法描述 常用的高级语言 FORTRAN 数值计算 COBOL 事务处理 PASCAL 结构程序设计
Part5语法分析 授课:胡静.
第2次课 上下文无关文法
第3章 文法和语言.
LL(1)分析方法 LL(1)是LL(k)的特例,其中的k则表示向前看k个符号. LL(1)方法和递归下降法属于同一级别的自顶向下分析法.
编译原理与技术 语法制导翻译 2019/1/17 《编译原理与技术》讲义.
李元金 计算机与信息工程学院 第9讲 语法分析—自上而下分析(1) 李元金 计算机与信息工程学院
第二、三章习题讲解
第二章 Java语言基础.
内容提要 什么是句法分析 与形式语言句法分析的比较 上下文无关语法的分析策略 自顶向下分析法 自底向上分析法 左角分析法
2.3 正则表达式 主要内容: 1.正则表达式和正则集; 2.正则表达式和有限自动机的相互转化。.
《编译原理与技术》 期末复习 计算机科学与技术学院 郑启龙 李 诚 25/12/2018.
第三章 语法分析 自顶向下语法分析思想 语法分析方法的分类: 自顶向下语法分析方法(Top-Down) ,亦称面向目标的分析方法;
语法分析 本章内容 语法分析器:把词法分析生成的词法单元流翻译成语法分析树(parse tree)
第3,4次课 一个简单的语法制导翻译器 2.3~2.5.
第2章 高级语言及其语法描述 2.1 程序语言的定义 2.2 高级语言的一般特征 2.3 程序语言的语法描述.
C语言程序设计 主讲教师:陆幼利.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
Partial Differential Equations §2 Separation of variables
编译原理总结-1 第3~5章.
第四章 自底向上分析方法 主要内容 自底向上分析的基本思想 简单优先分析方法 LR类分析方法 LR(0)分析方法 SLR(1)分析方法
文法等价变换 文法的等价 对文法G1和G2,若有:L(G1)=L(G2),则称文法G1和G2等价, 记作:G1=G2. 文法等价变换
复习.
自底向上的语法分析 4.5.
第四章 文法和语言 本章目的 为语言的语法描述寻求工具
大綱:整數的加法 整數的減法 蘇奕君 台灣數位學習科技股份有限公司
第九节 赋值运算符和赋值表达式.
编译原理与技术 -- 自顶向下分析 2019/5/5 《编译原理与技术》讲义.
1.2 子集、补集、全集习题课.
1.设A和B是集合,证明:A=B当且仅当A∩B=A∪B
复习:程序语言的语法描述 几个概念: 考虑一个有穷 字母表∑ 字符集 其中每一个元素称为一个字符
编译原理实践 6.程序设计语言PL/0.
慧能的教外別傳.
§2 自由代数 定义19.7:设X是集合,G是一个T-代数,为X到G的函数,若对每个T-代数A和X到A的函数,都存在唯一的G到A的同态映射,使得=,则称G(更严格的说是(G,))是生成集X上的自由T-代数。X中的元素称为生成元。 A变, 变 变, 也变 对给定的 和A,是唯一的.
成本會計 在決策中的功能 第四課 1.
Presentation transcript:

编译原理与技术 --文法和分析 2018/9/17 《编译原理与技术》讲义

文法和分析 形式语言中若干基本概念 形式语言分类 语言 文法(上下文无关文法) 分析树与二义性 乔姆斯基分类 2018/9/17 《编译原理与技术》讲义

若干基本概念 语言 语言L={ s | s 是∑上任一字符串}, s称为语言L的一个句子。 字母表∑-符号/字符的非空有限集合 e.g. 二进制数的∑={0,1},而十进制数的∑={0,1,…,9} ∑*-表示∑上所有字符串的集合;L∑* 字符串- ∑上若干字符组成的有穷序列 2018/9/17 《编译原理与技术》讲义

若干基本概念 语言 字符串 e.g. ∑={0,1}上的0,1串(二进制数)如0111,10101;∑={a,b}上的 a, b, aa , abab, … 空串-, ∈ ∑*, 串长-|s|={s中所含字符的个数},| |=0 串的连接运算-任意串x,y,一般地,xyyx, x= x 串的前缀- 任意串x,从其第一个字符(最左字符)起的字符序列是其前缀。亦是。 e.g. x = abc, 则,a,ab,abc均是x的前缀 2018/9/17 《编译原理与技术》讲义

若干基本概念 语言的运算 描述 运算 语言L和语言M 连接(积) LM={ xy| x∈L 且 y∈M } 合并(和) L∪M={x| x∈L 或 x∈M } 闭包 L*=L0∪L1∪L2∪…= 正闭包 L+=L1∪L2∪L3∪…= 2018/9/17 《编译原理与技术》讲义

若干基本概念 语言 e.g. L={a,b,…,z}, D={0,1,…,9}, B={ _ } L∪D = {…} LD={…} L(L∪D)*={…} (L∪ B)(L∪D∪B)*={…} D+={} 2018/9/17 《编译原理与技术》讲义

若干基本概念 文法 文法G=(VT,VN,S,P)定义为一个四元组,其中: VT-终结符号集合; VN-非终结符号集合,VT∩VN=∅ ; S-文法开始符号,S∈VN ; P-文法产生式集合,每一产生式形如, 其中, ∈ (VT∪VN )*,至少含有一个非 终结符,  称为相应产生式的左部,则 为产生式的右部。 2018/9/17 《编译原理与技术》讲义

若干基本概念 文法是描述语言的语法结构的形式规则,其中,终结符号(集合)表示组成语言的基本成份,如标识符、常数,算符等;非终结符号(集合)代表语法实体(范畴),如算术表达式、条件语句、过程等;而开始符号作为一特殊的非终结符号则代表着语言中“最大”的语法实体-语言的目标(也称为“句子”),如“程序”。产生式看作定义语法实体的一种书写规则,通过它,可以了解较“大”的语法实体如何由较“小”的语法实体(非终结符号)和/或语言基本成份(终结符号)来构成的。 2018/9/17 《编译原理与技术》讲义

若干基本概念 上下文无关文法(context-free grammar) 同样定义为四元组(VT,VN,S,P),P中的产生式 形式为: A,∈ (VT∪VN )*,而A ∈VN; 开始符号S须在产生式的左部出现至少一次。 2018/9/17 《编译原理与技术》讲义

若干基本概念 e.g.1 算术表达式(含+,*运算) 递归定义如下: 1)变量是一个算术表达式; 2)若E1和E2是算术表达式,则 E1 + E2, E1 * E2和(E1)也 是算术表达式。 2018/9/17 《编译原理与技术》讲义

若干基本概念 文法 P: EE+E EE*E E(E) Ei e.g.1 文法G1=({i,+,*,(,)},{E},E,P),其中产生式集合(左递归形式) P: EE+E EE*E E(E) Ei 2018/9/17 《编译原理与技术》讲义

若干基本概念 文法 P: EE+E P: EE+E EE*E | E*E E(E) | (E) E i | i e.g. 1文法G1=({i,+,*,(,)},{E},E,P),其中产生式集合 P: EE+E P: EE+E EE*E | E*E E(E) | (E) E i | i 相同左部的产生式 2018/9/17 《编译原理与技术》讲义

若干基本概念 文法 e.g.2 文法G2=({i,+,*,(,)},{E,T,F},E,P),P: EE + T | T TT * F 2018/9/17 《编译原理与技术》讲义

若干基本概念 文法G2,P: 文法G1,P: EE + T EE+E | T | E*E TT * F | (E) | F | i 文法G1和G2描述了相同的语言- 算术表达式 2018/9/17 《编译原理与技术》讲义

若干基本概念 文法产生的语言 e.g.3 i + i是算术表达式,那么文法G1是如何“描述”它的?文法G2呢? 2018/9/17 《编译原理与技术》讲义

若干基本概念 文法产生的语言 e.g.3 G1的描述: E ⇒ E + E ⇒ i + E ⇒ i + i G2的描述: E ⇒ E + T ⇒ T + T ⇒ F + T ⇒ i + T ⇒ i + F ⇒ i + i 2018/9/17 《编译原理与技术》讲义

若干基本概念 文法产生的语言 e.g.3 G1的“描述”方式: 从文法的开始符号E出发,反复用产生式的右部对其左部的非终结符进行替换和展开,直至i+i出现为止。 所用产生式的顺序为: 1) EE+E 2) E i 3) E i 2018/9/17 《编译原理与技术》讲义

若干基本概念 文法产生的语言 e.g.3 G2的“描述”方式: 所用产生式的顺序为: 1) EE+T 5) T F 2) E T 6) F i 3) T F 4) F i 2018/9/17 《编译原理与技术》讲义

若干基本概念 文法产生的语言 我们称上述“描述”为从开始符号E到i+i的“推导”过程。“⇒”表示一步“推导”。 一般地, A直接推导出,即 A ⇒  仅当A ∈ P, ,, ∈ (VT∪VN )*。 推导序列-  ,   2018/9/17 《编译原理与技术》讲义

若干基本概念 文法产生的语言 是句型,如果S  ,  ∈ (VT∪VN )*。 是句子,如果S  ,且 ∈ VT*。 文法G产生的语言L(G),定义为, L(G)={文法G产生的所有句子} 2018/9/17 《编译原理与技术》讲义

若干基本概念 文法产生的语言 e.g.4 文法G3产生的语言是什么? P:S b A A a A | a S⇒bA⇒ba S⇒bA⇒baA⇒baa S⇒bA⇒baA⇒baaA⇒…⇒baa…a L(G3) = { 以b开头后跟一个或多个a的串} 2018/9/17 《编译原理与技术》讲义

若干基本概念 e.g.5 文法产生的语言 L(G4)={ambn|m,n1} L(G5) = {anbn|n 1} G4: S A B A a A | a B b B | b G5: S a S b | ab 2018/9/17 《编译原理与技术》讲义

e.g.5 文法产生的语言 文法G4对句子aaabb的推导: S ⇒ A B S A B ⇒ a A B A a A ⇒ a a A B A a A ⇒ a a a B A a ⇒ a a a b B B b B ⇒ a a a b b B b 2018/9/17 《编译原理与技术》讲义

e.g.5 文法产生的语言 文法G5对句子aaaabbbb的推导: S ⇒ a S b S a S b ⇒ a a S b b S a S b ⇒ a a a S b b b S a S b ⇒ a a a a b b b b S a b 2018/9/17 《编译原理与技术》讲义

最左推导 最右推导 E⇒E + E ⇒i + E ⇒E + i ⇒i + i 句型推导时,总是选择最左出现的非终结符进行替换 总是选择最右出现的非终结符进行替换,也称为规范推导 最左推导 最右推导 E⇒E + E ⇒i + E ⇒E + i ⇒i + i 2018/9/17 《编译原理与技术》讲义

若干基本概念 规范推导(最右推导)和规范归约(最左归约) G1的句子i+i*i的规范推导过程: E 开始符号 ⇒ E + E E E + E ⇒ E + E * E E E * E ⇒ E + E * i E i ⇒ E + i * i E i ⇒ i + i + i E i 推导方向 2018/9/17 《编译原理与技术》讲义

若干基本概念 规范推导(最右推导)和规范归约(最左归约) G1的句子i+i*i的规范归约过程: i + i + i E i E + i * i E i E + E * i E i E + E * E E E * E E + E E E + E E (只有)开始符号 归约方向 2018/9/17 《编译原理与技术》讲义

最右推导 最左归约 如果右句型 可以“归约”到右句型 ,仅当存在最右推导序列 如果右句型 可以“归约”到右句型 ,仅当存在最右推导序列 从开始符号S出发,进行最右推导,用相应产生式右部文法符号串替换展开其左部非终结符号。目标为句子(右句型)。 从句子(右句型)出发,用最左归约,用相应产生式的左部非终结符号替换产生式右部(句柄)。目标为开始符号S。 2018/9/17 《编译原理与技术》讲义

最右推导 最左归约 推导中,关键是选择产生式 归约中,关键是确定句柄。而句柄与某产生式的右部相同且有某最右推导序列中的某一步对应;归约过程看成这一步最右推导的逆过程。 2018/9/17 《编译原理与技术》讲义

若干基本概念 分析树 分析树看成是(句型)推导的图形表示;反之,(句型)推导可理解为分析树的线形表示。 分析树所有结点v(内部结点和叶子结点)由文法符号或标记,即v∈ (VT∪VN∪{} ); 根结点由文法开始符号S标记; 内部结点A ∈ VN,其所有子结点从左往右排列构成以A为左部的某产生式的右部 2018/9/17 《编译原理与技术》讲义

圆圈内表示新构造的分析(子)树-即推导所用产生式 若干基本概念 分析树与推导 文法G1推导句子i+i*i (最左)推导过程: 分析树 E ⇒ E + E E E E + 圆圈内表示新构造的分析(子)树-即推导所用产生式 2018/9/17 《编译原理与技术》讲义

若干基本概念 分析树与推导-句子i+i*i (最左)推导过程: 分析树 E ⇒ E + E ⇒ i + E E E E + i (最左)推导过程: 分析树 E ⇒ E + E ⇒ i + E E E E + i 2018/9/17 《编译原理与技术》讲义

若干基本概念 分析树与推导-句子i+i*i (最左)推导过程: 分析树 E ⇒ E + E ⇒ i + E ⇒ i + E * E E E (最左)推导过程: 分析树 E ⇒ E + E ⇒ i + E ⇒ i + E * E E E E + E * E i 2018/9/17 《编译原理与技术》讲义

若干基本概念 分析树与推导-句子i+i*i (最左)推导过程: 分析树 E ⇒ E + E ⇒ i + E ⇒ i + E * E (最左)推导过程: 分析树 E ⇒ E + E ⇒ i + E ⇒ i + E * E ⇒ i + i * E E E E + E * E i i 2018/9/17 《编译原理与技术》讲义

若干基本概念 分析树与推导-句子i+i*i (最左)推导过程: 分析树 E ⇒ E + E ⇒ i + E ⇒ i + E * E (最左)推导过程: 分析树 E ⇒ E + E ⇒ i + E ⇒ i + E * E ⇒ i + i * E ⇒ i + i * i E …1代结点 E E + …2代结点 E * E …3代结点 i i i …4代结点 2018/9/17 《编译原理与技术》讲义

若干基本概念 二义性文法 文法G是二义性文法,如果它的某个句子有两种不同的最左(或最右)推导;或有两棵不同的分析树。该句子称为文法G的二义性句子。 二义性语言 语言L是二义性的语言,如果不存在能产生它的非二义性的文法;或者能产生该语言的文法均为二义性文法。 2018/9/17 《编译原理与技术》讲义

若干基本概念- 二义性文法 e.g.8 文法G1是二义性文法。这是因为对于句子 i+i*i 有两种不同的最右推导。 推导1: E ⇒ E + E ⇒ E + E * E ⇒ E + E * i ⇒ E + i * i ⇒ i + i * i 推导2: E ⇒ E * E ⇒ E * i ⇒ E + E * i ⇒ E + i * i⇒ i + i * i 2018/9/17 《编译原理与技术》讲义

若干基本概念- 二义性文法 e.g.9 文法G1是二义性文法。这是因为对于句子 i+i*i 有两棵不同的分析树。 E E E + E E E 2018/9/17 《编译原理与技术》讲义

若干基本概念- 二义性文法 e.g.10 文法G1对于句子 i+i+i 有两棵不同的分析树。 E E E + E E E + E i E + 2018/9/17 《编译原理与技术》讲义

若干基本概念- 二义性文法 e.g.11 文法G2是非二义性文法。对于句子i+i*i有唯一的最左推导过程。(why?) 推导过程: E ⇒ E + T ⇒ T + T ⇒ F + T ⇒ i + T ⇒ i + T * F ⇒ i + F * F ⇒ i + i * F ⇒ i + i * i 2018/9/17 《编译原理与技术》讲义

若干基本概念- 二义性文法 e.g.12 文法G2是非二义性文法。对于句子i+i*i有唯一的分析树。 E E + T F T T * F F 2018/9/17 《编译原理与技术》讲义

if-then-else 问题 e.g.13 文法G3如下: stmt  if expr then stmt | if expr then stmt else stmt | others G3是二义性文法,因为对输入串, if E1 then if E2 then S1 else S2 有两棵不同的分析树(推导) 2018/9/17 《编译原理与技术》讲义

stmt if expr then stmt E1 if expr then stmt else stmt E2 S1 S2 stmt if 2018/9/17 《编译原理与技术》讲义

if-then-else 问题 解决if-then-else的二义性 对输入串, stmt  matched | unmatched matched  if expr then matched else matched | others unmatched  if expr then stmt | if expr then matched else unmatched 对输入串, if E1 then if E2 then S1 else S2 仅有惟一的分析树(推导) 2018/9/17 《编译原理与技术》讲义

stmt unmatched if expr then stmt E1 matched if expr then matched else 2018/9/17 《编译原理与技术》讲义

if-then-else 下面的文法是否有二义性? stmt  if expr then stmt else-part | others else-part  else stmt endif | endif 2018/9/17 《编译原理与技术》讲义

约化的CFG CFG中不含有不可达、或者无法推出终结符串的非终结符。 文法G4 约化后的文法G5: S  A | B S  A A  a A  a B  B b C  c 2018/9/17 《编译原理与技术》讲义

形式语言分类 0型文法 短语文法 1型文法 上下文有关文法 2型文法 上下文无关文法 3型文法 正规文法 或 图灵机 线性有界自动机 下推自动机 有限自动机 2018/9/17 《编译原理与技术》讲义

形式语言分类 0型文法 短语文法 1型文法 上下文有关文法 2型文法 上下文无关文法 3型文法 正规文法 L0={ } L1={ L2={ 2018/9/17 《编译原理与技术》讲义

正规式 V.S 上下文无关文法 任意正规集可以用一上下文文法来产生。 如:正规式(a|b)*ab,则如下的CFG产生相同语言集合(正规集): A0  aA0 | bA0 | aA1 A1  bA2 A2  ε A0 A1 A2 a b 正规式(a|b)*ab对应FA 相应CFG的构造规则: (1)FA中若有状态i 状态j且标记为a的转换,则添加产生式 Ai aAj,Ai和Aj为状态i和j对应的非终结符 (2)FA中的终态f,引入产生式Afε 2018/9/17 《编译原理与技术》讲义

语法分析 分析树 词法分析 语法分析器 符号表 语义分析 错误处理 token 高级语言源程序 get_next_token 2018/9/17 《编译原理与技术》讲义

有两种通用的语法分析方法。第一种方法,称为自顶向下的(top-down)。如果一个分析器从树的顶端(开始符号)开始发现词法记号序列所对应的分析树,并随后以深度优先的方式(用产生式)对其进行扩展,则它被认为是自顶向下的。自顶向下的语法分析器对应分析树的前序遍历。自顶向下的语法分析技术本质上是预测性的(predictive),因为它们总是在实际匹配开始之前预测将要被匹配的产生式。自顶向下的(top-down)预测分析用的产生式对应着最左推导。 2018/9/17 《编译原理与技术》讲义

另一种方法属于自底向上的(bottom-up)语法分析器类。自底向上的语法分析器从分析树的底部(树的叶结点,它们都是终结符号)开始发现其结构,并确定用来生成叶结点的产生式。随后发现用来生成叶结点的直接父结点的产生式。自底向上的语法分析器对应分析树的后序遍历。自底向上的(bottom-up)语法分析所识别的产生式对应着最右分析-即最左规约(最右推导的严格逆序)。 2018/9/17 《编译原理与技术》讲义