第04章 文法与语法分析(中)

合集下载

编译原理chapter4 语法分析

编译原理chapter4 语法分析

type array[simple] of type {注:A=type,a=array,
type→array[simple ] of type}
array[num dotdot num] of type
{注:A=simple, a=num
simple→num dotdot num }
array[num dotdot num] of simple
aSbAa (SbA) aSbbaa (ba) aabbaa (a)
S
a
A
S
S
b
A
a
aபைடு நூலகம்
ba
精品文档
7
4.2预测分析器 4 .2 .1 预测分析 预测分析的原理 4 .2 .2 递归预测分析器的构造 用一组递归过程实现预测分析,产生式的状 态转换图可作为编写递归过程的兰图。 4 .2 .3 非递归预测分析器的构造—LL(1) 对于每一步分析,分析表项M[A,a]=‘A ’ 表示:面对非终结符号精A品和文档向前看符号a应选 8
A 1 2 ... n
i,j(1 i,j n i<>j),从 i推导出来的第一个 终结符号集合(称为FIRST( i) )和从 j推 导出来的第一个终结符号集合(称为FIRST( j) )不相交,即, FIRST( i) FIRST( j)=
精品文档
12
定义4.1 令G[S]=(VT,VN,S,P),则
FIRST( )= a a*… a VT
例4.2 文法G[S],其产生式如下:
S→aA|d A→bAS|ε (4.2)
若 w=abd,则构造最左推导的过程如下:
S aA {注:A=S,a=a,S→aA}
abAS {注:A=A,a=b,A→ bAS}

编译原理文法和语言与语法分析

编译原理文法和语言与语法分析
③若∑={a,b}, ∑上的一个形式语言为∑上所有可能的符号串集。 即L={a,b,ab,ba,aa,bb,……},此时用枚举法已经无法表示该语言了。
2020年8月17日星期一
编译原理主讲:周有顺
版权所有 勿复制传播 7
▲ 文法与语言
● 文法(形式)定义: 我们用四元式来作为描述一
个语言L的工具(会发生什么),用G表示。即G≡(Vt,Vn,P,S)其
答:G ≡ ( Vt = {a,b}, Vn = {A}, S ≡ A,
P = {Aa,Ab,AAa,AAb})
则,L = L(G)
证:A=>a|b|Aa|Ab=>(a|b)|A(a|b)=>(a|b)(a|b)*
● 文法是定义语言的好工具:只要定义它含哪些语 法范畴(Vn),每个语法范畴所含语法单位之间的关系(P), 还有基本单词符号集(Vt),最大的语法范畴是谁(S)。这 四元一定,则文法就定义了一个语言----由S和P所能产 生出的终结符串集。记为L(G)。即
高级程序设计语言
编译原理
主讲 周有顺
(适用于2008级计算机本科师范专业)
2020年8月17日星期一
编译原理主讲:周有顺
版权所有 勿复制传播 1
第四讲 文法和语言与语法分析
──上下文无关文法(LL文法和LR文法) 与语法分析程序设计
2020年8月17日星期一
编译原理主讲:周有顺
版权所有 勿复制传播 2
回忆
语法分析的任务是把词法分析的结果单词符 号串进一步分解成各类语法单位 (语法范畴),并 分析它们之间的层次关系输出语法树。
语法分析器 由单词符号(终结符)和语法范畴 单词符号串──────→ (语法变量或称非终结符)构成

CH04--语法分析.ppt

CH04--语法分析.ppt
12
*
,则规定FIRST(i)。
例: 有如下产生PASCAL类型子集的文法: typesimple | id | array[simple] of type simpleinteger|char|num dotdot num (文法4.2)
分析输入串:array [num dotdot num] of char
指派i去匹配输入符号串
11
对文法的要求
1. 不含左递归 2. FIRST(i)∩FIRST(j)= A1|2||n
* FIRST(i)={ a| i
如果 i
( i j)
a,aVT, i、(VT∪VN)* }
非终结符号A的所有候选式的开头终结符号集两两互不相交
33
预测分析表的构造

FIRST集合
定义:对任何文法符号串(VT∪VN)*, FIRST()是可以推导出的开头终结符号集合 描述为:
FIRST()={ a |
a…, aVT }
*

,则FIRST()。
*
34


构造每个文法符号XVT∪VN的FIRST(X)
若XVT,则FIRST(X)={X};

type的三个候选式,有:
FIRST(simple)={ integer, char, num } FIRST(id)={ } FIRST(array[simple] of type)={ array }

simple的三个候选式,有:
FIRST(integer)={ integer } FIRST(char)={ char } FIRST(num dotdot num)={ num }

递归下降分析方法的实现

Chapter04_Syntax Analysis语法分析共125页文档

Chapter04_Syntax Analysis语法分析共125页文档

4.2.2.1 Specification of context-free grammar rules 上下文无关文法规则的说明
● 什么是文法? 文法是对语言结构的定义与描述。即从形式上用于描述和 规定语言结构的称为“文法”(或称“语法”)。
例:请判断英语句子The big elephant ate the peanut. 语法上是否正确?
the regular expression: number = digit digit* digit = 0|l|2|3|4|5l6|7|8|9
*
• |() =
无 不出现 | 含义变化 (=, ::=)
the context-free grammar: number number digit | digit ;
20times
② 语法错误是指语法结构出错,如少分号、begin/end不配 对等。
begin
x:=a+b
y:=x;
25.05.2020 北京化工大学信息科学与技术学院计算机系 4
4.1 语法分析器的作用
● 源程序中可能出现的错误
① 词法错误
如非法字符或拼写错关键字、标识符 等;
② 语法错误
intege 是2指0t语im法es结构出错,如少分
=> the big elephant ate the <名词>
=> the big elephant ate the peanut
a:=a/b2;5.05.2020 北京化工大学信息科学与技术学院计算机系 5
4.1 语法分析器的作用
● 语法错误处理的目标
• 清楚而准确地报告错误的出现 (地点正确、不漏报、不错报也不多报); • 迅速地从每个错误中恢复过来 (以便分析继续进行); • 不应使对语法正确源程序的分析速度降低太多。

编译原理完整课件_第4章 语法分析-自上而下分析

编译原理完整课件_第4章 语法分析-自上而下分析

2022/3/20
中南大学软件学院 陈志刚
6
第四章 语法分析-自上而下分析
4.2 自上而下分析面临的问题
➢ 顾名思义,自上而下就是从文法的开始符号出 发,向下推导,推出句子。 • 带回溯的分析方法 • 不带回溯的递归子程序(递归下降)分析方 法
➢ 自上而下分析的主旨: 对任意输入串,试图用一切可能的办法,从文 法开始符号(根结)出发,自上而下地为输入 串建立一棵语法树。或者说,为输入串寻找一 个最左推导。
设 ,有P→Pα|β,若α≠>ε,β不以P开头 (否则不可能消除左递归)。
则改写为:
可消除左递归。
2022/3/20
中南大学软件学院 陈志刚
12
第四章 语法分析-自上而下分析
一般地,若 αi≠ε,βj不以P开头, 则可改写为:
从而消除直接左递归。 ■ 例:S→Sabc|Sab|ab ■ 消除直接左递归得:
2022/3/20
中南大学软件学院 陈志刚
13
2、完全消除左递归 分析
第四章 语法分析-自上而下分析
虽不含直接左递归,但
所以含有左递归。
■ 如果文法G不含回路( ),也不含ε产生式,
则下列算法可消除左递归(完全)
①把G的非终结符按任意顺序排列成P1,…,Pn
②for i:=1 to n do
begin for j:=1 to i-1 do
➢ 关键:对一个文法,当给你一串(终结)符号 时,怎样知道它是不是该文法的一个句子呢? 这就要判断,看是否能从文法的开始符号出发 推导出这个字符串。或者,从概念上讲,就是 要建立一棵与输入串相匹配的语法分析树。
2022/3/20
中南大学软件学院 陈志刚

编译原理Part4语法分析

编译原理Part4语法分析
ห้องสมุดไป่ตู้
同步符号集的选择
把FOLLOW(A)中的所有符号放入非终结符A的同步符号集。 如果我们跳读一些输入符号直至出现FOLLOW(A)中的同步 符号,把A从栈中弹出来,这样就可能使分析继续下去。 对于非终结符A来说,只用FOLLOW(A)作为它的同步符号 集是不够的。例如,如果分号作为语句的终结符,那么作为 语句开头的关键字就可能不在产生表达式的非终结符的FOL LOW集合中。这样,在一个赋值语句后少一个分号就可能 导致作为下一个语句开头的关键字被跳过
如果非终结符A的所有候选首符集两两不相交,即A的任何 两个不同候选αi和αj
FIRST(αi) ∩FIRST(αj)=Φ
那么当要求A匹配输入串时,A就能根据它所面临的第一个 输入符号a,准确的指派某一个候选前去执行任务。这个候 选就是那个终结首符集含a的α。
消除回溯、提取左因子
提取左因子的方法
假定A的规则是: A→δβ1 |δβ2 | … |δβn |γ1 |γ2 | … |γm
自顶向下分析的简单例子
假定文法G[S],以及输入串x*y(记为α)。
S→xAy
A→**|*
初始化:
S
x*y
IP
第一步扩展
S
x*y
x
A
y
IP
自顶向下分析的简单例子
假定文法G[S],以及输入串x*y(记为α)。
S→xAy
第二步扩展:
S
A→**|*
x*y
x
A
y
IP
**
回溯 S
x*y
x
A
y
IP
*
自顶向下分析方法的特点
通用的语法分析方法,用来分析任何文法,生成编译器时效率 太低 编译器使用的语法分析方法—处理文法的一些子类

04 语法分析(2) _ 消除回溯 FIRST

04  语法分析(2) _ 消除回溯 FIRST
① 公共左因子 ② ε - 产生式
存在回溯的害处:
① 选择候选式是盲目的;
② 消耗大量时间和空间,降低了工作效率;
③ 无法指出语法错误的确切位置。
消除回溯的途径:
1. 避免回溯 首先设法回避回溯,若实在无法避免,则改写文法,即反复提取 公共左因子。 2. 超前扫描 当不满足避免回溯的条件时,采用超前扫描的方法,即向前侦察 各输入符号串的第二个、第三个符号来确定要选择的目标。 这种方法是通过向前多看几个符号来确定所选择的目标,从本质 上来讲也有回溯的味道,因此比第一种方法费时,但是读的仅仅 是向前侦察情况,不作任何语义处理工作。
FIRST(α) {a|α a... , a VT }
可见,所谓符号串的FIRST,就是指的所有可能推导的开头 终结符或的集合。 由定义,不难得出下面的结论: ① 若 α VT ,则 FIRST(α)={α}; ② 若=aA,其中A代表非终结符,则 FIRST(α)={a} ; ③ 若=Aa,则 FIRST(α)=FIRST(A) ; * ④ 若 ,则 ε FIRST(α)。
基于第1种方法:
• 引入FIRST集概念,目的是为了在当前输入的条
件下,观察哪个产生式的右部能够导出输入符
号,进而决定采用哪个产生式来进行推导。 • 显然,我们关心的是产生式右部符号串的FIRST
集,即文法符号串的FIRST。
这个符号串可以是任意的终结符和非终结符的 组合。
FIRST集
定义4.1 设G是2-型文法,且不含左递归,则对于G中的 *,其首符号 V 集FIRST()为:
S 初值
未定
A
未定
B
未定
C
未定
D
未定
2. 其次,按下述步骤逐步更新标志位: (1)依次扫描文法每一条产生式 ① 删除所有右部含终结符的产生式 若因此使得以某非终结符为左部的所有产生式都被删 除,则置该非终结符的标记为“否”。例“D”。 ② 若某非终结符存在一条右部为ε的产生式,则置该非

编译原理-第四章 语法分析[xiwang]

编译原理-第四章 语法分析[xiwang]

§4.2 自顶向下语法分析
一、自顶向下分析方法的问题及其解决办法 1、消除回溯
(2)回溯问题的解决 1)路标法 举例:
<语句>∷=<变量>:=<表达式>| If <布尔表达式>then <语句>
当分析语句:
If A<B then A:=B

我们可以根据第二个产生式以If开始直接选用它作判 断。 If 在这里就是路标
一、自顶向下分析方法的问题及其解决办法 1、消除回溯
如:当前输入符号为 b (b ∈VT) , (2)回溯问题的解决 如果 b ∈ FIRST(αi), 1)路标法 则可选择第i个产生式去匹配输入串。 无回溯文法设计准则:
为了避免回溯,我们对文法要求是 FIRST(αi)∩ FIRST(αj)=(i≠j) 即对文法中的任意一个非终结符号,其规则右部有多个选择时, 若由各个选择所推出的 终结符号串 首符号集合要两两不相交 。 这样就可能根据当时读进的符号是属于哪个选择的 FIRST( αi), 来唯一地确定该选用哪个选择来匹配输入串。
一、自顶向下分析方法的问题及其解决办法 1、消除回溯
(2)回溯问题的解决 2)提取左公因子法 举例: 文法
要分析 S ∷=xAy , A ∷=**|* x*y
显然存在回溯。 为避免分析时回溯,可以将文法改写成: S ∷=xAy , A ∷=*(*|)
进一步改写成 S ∷=xAy , A ∷=*B, B ∷=*|
§4.2 自顶向下语法分析
一、自顶向下分析方法的问题及其解决办法 1、消除回溯
(1) 回溯分析方法定义 S c A d
举例
如:S∷=cAd A∷=ab|a 要判断“cad”是否为该文法的句子, 可以分别用A∷=ab 和A∷=a 代入第一个产生式中试探
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《编译原理》电子教案 韶关学院计算机系程细柱
10
PA自动机:假设产生式[1]Z→A,则可构造如下Z PA自动机:假设产生式[1]Z→A,则可构造如下Z产 自动机 [1]Z→A 生式自动机,并记为PA(Z) PA(Z)。 生式自动机,并记为PA(Z)。
1.0 A 1.1
GA自动机:假设给定文法G的一组PA自动机: GA自动机:假设给定文法G的一组PA自动机: 自动机 PA自动机 PA(A1),…,PA(An),则按如下方法构造的自动机称为 ),… 文法自动机,记为GA(G). G文法自动机,记为GA(G). PA(S)的初始状态作为GA(G)的初始状态 的初始状态作为GA(G)的初始状态; [1] 将PA(S)的初始状态作为GA(G)的初始状态; 连接各PA自动机; PA自动机 [2] 连接各PA自动机; 把原所有PA(A 的终止状态作为GA(G) GA(G)的终止 [3] 把原所有PA(Ai)的终止状态作为GA(G)的终止 状态。 状态。
• 短语:设S是文法的开始符,αηβ是句型(即有S 短语: 是文法的开始符, 是句型(即有S ⇒*αηβ),如果满足条件: αηβ),如果满足条件: ),如果满足条件 S ⇒* αA β A ⇒+ η 则称η是句型α 的一个短语 短语。 则称η是句型αηβ的一个短语。 • 直接短语(简单短语):如果满足条件: 直接短语(简单短语):如果满足条件: ):如果满足条件 S ⇒* αA β A ⇒ η 则称η是句型α 的一个简单短语 简单短语。 则称η是句型αηβ的一个简单短语。 • 句柄:一个句型可能有多个简单短语,其中最左的 句柄:一个句型可能有多个简单短语,其中最左的 简单短语称之为句柄。 称之为句柄 简单短语称之为句柄。
《编译原理》电子教案
7
韶关学院计算机系程细柱
例:S → aAcBe [1] A → b [2] A → Ab [3] B → d [4] 输入流:abbcde。 输入流:abbcde。 规范推导过程为: 规范推导过程为:
逆过程: 分析栈,输入流) 逆过程:(分析栈,输入流) ( -, abbcde) ⇒(a,bbcde) //a为移入活前缀 a 移入活前缀 ab为 ⇒(ab,bcde) //ab为归约活前缀 (ab ab ⇒(aA,bcde) //aA为移入活前缀 为移入活前缀 ⇒(aAb,cde) //aAb为归约活前缀 (aAb,cde) Ab 为 ⇒(aA,cde) ⇒(aAc,de) //aA为移入活前缀 为移入活前缀 //aAc为移入活前缀 为移入活前缀
《编译原理》电子教案
9
韶关学院计算机系程细柱
设文法G[S]: 例,设文法G[S]: [1] S → aAc [2] A → Abb [3] A → b
1
a
2 b
[3]
A
3 b 4 b
[2]
c
[1]
求归约活前缀集如下: 求归约活前缀集如下: aAc[1] //因为 因为S Abb[2]c[1] aAbb[2] //因为S⇒aAc[1] ⇒aAbb[2]c[1] //因为 因为S b[3]c[1] ab[3] //因为S⇒aAc[1] ⇒ab[3]c[1] 以上结果见上图。 以上结果见上图。
《编译原理》电子教案
2
韶关学院计算机系程细柱
主要内容: 主要内容:
LR的几个基本概念 LR的几个基本概念 识别归约活前缀的识别器 LR(0)分析算法 LR(0)分析算法 SLR(1)分析算法 SLR(1)分析算法
《编译原理》电子教案
3
韶关学院计算机系程细柱
LR的几个基本概念 4.5.1 LR的几个基本概念
《编译原理》电子教案
13
韶关学院计算机系程细柱
• 例:假设G[S]: S→ … , D→aA, A→aB, A→Ba, B 假设G[S]: S→ D→ A→ A→ →b,求close({D→a·A}) 。 close({D→ A}) • 解: close({D→a·A}) ={D→a·A, A→·aB, A→·Ba, close({D→ A}) ={D→ A, A→ aB, A→ Ba, B→·b} b}
《编译原理》电子教案
4
韶关学院计算机系程细柱
例:
E E T T F ( E ) * F i + T F
句型: 句型:(E)*i+F 短语: 短语: 1.(E)*i+F 1.(E)*i+F 2.(E)*i 3.(E) 4. i 5. F 简单短语: 简单短语: (E),i,F 句柄: 句柄:(E)
《编译原理》电子教案
//S为规范前缀 为规范前缀
韶关学院计算机系程细柱
归约活前缀识别器---LR(0)自动机 ---LR(0) 4.5.3 归约活前缀识别器---LR(0)自动机
LR(0)归约活前缀定理:简称派生定理, LR(0)归约活前缀定理:简称派生定理,设增 归约活前缀定理 [0]S′ 则定理内容如下: 广产生式为[0]S 广产生式为[0]S′→S,则定理内容如下: [1] S[0]是LR(0)归约活前缀。 S[0]是LR(0)归约活前缀 归约活前缀。 [p]是LR(0)归约活前缀, [2] 若αAβ[p]是LR(0)归约活前缀,且 归约活前缀 [q]A→ 是产生式, απ[q]也是LR(0) [q]也是 [q]A→π是产生式,则απ[q]也是LR(0) 归约活前缀。 归约活前缀。
A 1.1 1.0 ε ε A a a 2.1 2.2 2.3 ε 2.0 ε b 3.1 3.0
《编译原理》电子教案
12
A 1 a b
2 a 3 A b 4 6 a 5
韶关学院计算机系程细柱
LR(0)项目: A→αβ是产生式,则称A→α•β为 αβ是产生式 A→α•β LR(0)项目:若A→αβ是产生式,则称A→α•β为 项目 LR(0)项目 简称项目),也写作α•β p]形式 项目( ),也写作α•β[ 形式。 LR(0)项目(简称项目),也写作α•β[p]形式。 项目集的投影:假设SS是LR(0)项目集,则称下面 项目集的投影:假设SS是LR(0)项目集, SS 项目集 nextstates(SS,X)为SS关于 的投影集: 关于X nextstates(SS,X)为SS关于X的投影集: nextstates(SS,X)={A→ •β|A→α•Xβ∈S SS,X)={A→α |A→α• nextstates(SS,X)={A→αX•β|A→α•Xβ∈SS, X∈(VT∪VN)} 项目集的闭包:假设IS是LR(0)项目集, 项目集的闭包:假设IS是LR(0)项目集,则称下面 IS 项目集 CLOSURE(IS)为IS的闭包集 的闭包集: CLOSURE(IS)为IS的闭包集: CLOSURE(IS)= IS ∪ {A→•π |B→α β∈CLOSURE(IS) A→π {A→•π |B→α•Aβ∈CLOSURE(IS) A→π∈G}
《编译原理》电子教案
11
韶关学院计算机系程细柱
设文法G[S]: 例,设文法G[S]: [1] Z → A [2] A → aAa [3] A → b
1.0 2.0 3.0
A a b
1.1 2.1 3.1 A 2.2 a 2.3
PA自动机见右上图 GA自动机见左下图 自动机见右上图; 自动机见左下图, 解:PA自动机见右上图;GA自动机见左下图,其 确定化后见右下图: 确定化后见右下图:
goto(IS,E)
T
E→T • T→T • *P P
3
goto(IS,T)
P→(• E) • E→• E+T • E→• T • T→ • T *P T→ • P P→• id • P→• ( E ) •
《编译原理》电子教案
6
韶关学院计算机系程细柱
4.5.2 活前缀
• • • 规范推导: 最右推导。 规范推导:即最右推导。 规范归约:即最左归约。 规范归约: 最左归约。 规范句型: 最右推导导出的句型 也称右句型 导出的句型( 右句型)。 规范句型:用最右推导导出的句型(也称右句型)。
• 规范前缀:若存在规范句型αη,且η是终极符串或空串,则称 规范前缀:若存在规范句型αη, αη 是终极符串或空串, 为规范前缀。 α为规范前缀。 • 活前缀:对个规范前缀α,如果: 活前缀:对个规范前缀α 如果: 不含简单短语(移入型活前缀) [1] 不含简单短语(移入型活前缀) 或 含一个简单短语,但其后没有符号(归约型活前缀) [2] 含一个简单短语,但其后没有符号(归约型活前缀) 则称规范前缀α为活前缀;它表示符号栈中的内容, 则称规范前缀α为活前缀;它表示符号栈中的内容,即输入串 中已被分析过的部分。 中已被分析过的部分。
《编译原理》电子教案
15
韶关学院计算机系程细柱
例:G[s]:E→E+T, E→T, T→ T *P, T→P , P→id , P→ (E) → → → →
0
E→• E+T • E→• T • T→ • T *P T→ • P P→• id • P→• ( E ) • (
5
E
1
E→E• +T •
2
a D→a·A A → ε A→·aB a → ε A→·Ba B → ε B→·b b →
a D→a·A A → A→·aB a → A→·Ba B → a B→·b →
《编译原理》电子教案
14
韶关学院计算机系程细柱
LR(0)项目表示法:有三种模式:A→α β LR(0)项目表示法:有三种模式:A→α·β(产生 项目表示法 式模式)、 β[p](归约号模式)、[p,i]( )、α )、[p,i] 式模式)、α·β[p](归约号模式)、[p,i](坐标 型模式)。 型模式)。 project函数 假设给定项目集IS 函数: IS, project函数:假设给定项目集IS,则: project(IS,X)={A→α•X |A→α• β∈I IS,X)={A→α• α•X project(IS,X)={A→α•Xβ|A→α•Xβ∈IS} 它表示IS IS中 后符号为X 它表示IS中“·”后符号为X的项目集。 后符号为 的项目集。 shift函数 假设给定项目集IS 函数: IS, shift函数:假设给定项目集IS,则: shift(IS)={A→ •β|A→α•Xβ∈I IS)={A→α |A→α• shift(IS)={A→αX•β|A→α•Xβ∈IS} 它表示IS IS中 右移一位所得的项目集。 它表示IS中“·”右移一位所得的项目集。 右移一位所得的项目集 goto函数 假设给定项目集IS 函数: IS, goto函数:假设给定项目集IS,则: goto(IS,X)=close(shift(project(IS,X))) IS,X)=close(shift(project( goto(IS,X)=close(shift(project(IS,X))) 它表示IS状态的X IS状态的 它表示IS状态的X输出边所指向状态的项目集闭 包。
相关文档
最新文档