916073-编译原理原理与技术-第3章 语法分析

合集下载

编译原理语法分析3

编译原理语法分析3
3.2 语言和文法
3.2.4 适当的表达式文法 用一种层次观点看待表达式 id id (id+id) + id id + id id id (id+id) 文法 expr expr + term | term term term factor | factor factor id | (expr)
3.2 语言和文法
L3 ={anbn | n 1 } S aSb | ab L3是不能用正规式描述的语言的一个范例 若存在接受L3 的DFA D,状态数为k个 设D读完, a, aa, …, ak 分别到达状态s0, s1, …, sk 至少有两个状态相同,例如是si和sj,则ajbi属于L3
3.2 语言和文法
3.2.3 验证文法产生的语言 G : S (S ) S | L(G) = 配对的括号串的集合 按推导步数进行归纳:推出的是配对括号串 归纳基础: S 归纳假设:少于n步的推导都产生配对的括号串 归纳步骤:n步的最左推导如下: S (S )S * (x) S * (x) y
3.2.9 形式语言鸟瞰 文法 G = (VT , VN, S, P) 0型文法: , , (VN VT)*, | | 1 1型文法:| | | |,但S 可以例外 2型文法:A ,AVN , (VN ∪VT)* 短语文法、上下文有关文法、上下文无关文法
3.2 语言和文法
3.2 语言和文法
3.2 语言和文法
3.2.9 形式语言鸟瞰 文法 G = (VT , VN, S, P) 0型文法: , , (VN VT)*, | | 1 1型文法:| | | |,但S 可以例外 短语文法
3.2 语言和文法
3.2.9 形式语言鸟瞰 文法 G = (VT , VN, S, P) 0型文法: , , (VN VT)*, | | 1 1型文法:| | | |,但S 可以例外 短语文法、上下文有关文法

第3章 语法分析-编译原理及实践教程(第3版)-黄贤英-清华大学出版社

第3章 语法分析-编译原理及实践教程(第3版)-黄贤英-清华大学出版社
• 文法是被用来精确而无歧义地描述语言的句子的构成方式. • 文法描述语言的时候不考虑语言的含义。
3.2.1 文法的定义
例1:有如下规则
<句子><主语><谓语> <主语><代词>|<名词> <代词>我 <名词>大学生 <谓语><动词><直接宾语> <动词>是 <直接宾语><代词>|<名词>
(表示由…组成)
• 归约:推导的逆过程。
• 直接归约:直接推导的逆过程
几个概念的形式定义
• 直接推导: 如果αβ是文法 G=(Vn,Vt,P,S)
的产生式,γ和δ是V*中的任意符号,若有符号 串v,w满足: v=γαδ,w=γβδ,则说v直接产生w,(w是v的 直接推导)记作:v=>w 例:S01, 0S0=>0010(直接推导γ=0,δ=0) • 如果存在v=>w0=>w1=>w2...=>Wn=w(n>0),则 称v推导出w(长度为n),记作v+=>w(至少一步) • 若有v=>w或v=w,则记作v*=>w(0步或若干步)
一个非终结符号,β∈V*)
–上例中: G=(Vn,Vt,P,<句子>)
Vn=(<句子>,<主语>,<谓语>,<代词>,<动词>,
<名词>,<直接宾语>)
Vt= (我,是,大学生)
P=
<句子><主语><谓语>
<主语> <代词>|<名词>

编译第三章语法分析精选PPT

编译第三章语法分析精选PPT
E 为文法的开始符号, + - * / ( ) 为终结符.
例如:考虑一个文法G1:
S→ bA A→ β |a β →aA 它定义了一个什么样的语言呢? S是开始符号,是非终结符 A是非终结符 β是终结符与非终结符组成的字符串 b是终结符 a是终结符 结论:S→ baa*
3 文法 G 与语言L(G)的关系及术语
α1=*> αn表示经零步或若干步α1可推出αn.
定义:设S 是G的开始符号,若 S=*>α, {α ∈(VT ∪ VN) *}, 则称 α是 G的一个句型;若 α ∈VT *,则称α是 G的一个句子. 如果两个文法产生同样的语言,则这两个文法等价。
例如: E=>E+E=>E*E +E=>i * E + E=> i * i + E => i * i + i
本章介绍语法分析,是分析语法结构,使用文法;而前
一节词法分析,是分析我们的词法规则,使用正规式;他们 有什么区别、联系、相似之处。
2、正规式和上下文无关文法的比较
正规式所描述的每一种结构都可以用上下文无关文法来描述。
例如:正规式(a|b)*abb和上下文无关文法
A0 → aA0|bA0|aA1
A1 → bA2
在程序语言中, S代表了程序这一语法概念. P: 是产生式的有限集合。一条产生式定义了一个非终结 符,产生式形式如下:
A→ α (A∈ VN , α∈ (VT ∪ VN ) * ) 称A定义为α . (→ 有时也会用::=代替) α∈ (VT | VN ) *
例:文法({id,+,-,*,/,↑,(,)},{expr,op},expr,P)定 义了简单的算术表达式,P是由下列产生式组成的有限 集合:

编译原理 第三章 语法分析

编译原理 第三章 语法分析

α1=>α2=>...=>αn,则称此过程为零步或多步推导,记为:
α1=*>αn,其中α1=αn的情况为零步推导。
若α1≠αn,即推导过程中至少使用一次产生式,则称此过
程为至少一步推导,记为:α1=+>αn。

定义3.2强调了两点: α,有α=*>α,即推导具有自反性;
若α=*>β,β=*>γ,则α=*>γ,即推导具有传递性。
5. 静态语义错误:如类型不一致、参数不匹配等
6. a,b:integer; x:array[1..10] of integer;
7. x:=a+b;
8. 动态语义错误(逻辑错误):如死循环、变量为零时作除数等
9. while (t) { ...};
a:=a/b;
精品文档
4
3.1.2 语法错误的处理原则(续1)
棵树。
(1) 根由开始符号所标记;
(2) 每个叶子由一个终结符、非终结符、或ε标记;
(3) 每个内部结点由一个非终结符标记;
(4) 若A是某内部节点的标记,且X1,X2,...,Xn是该节点
从左到右所有孩子的标记,则A→X1X2...Xn是一个产生式。若
A→ε,则标记为A的结点可以仅有一个标记为ε的孩子。
精品文档
8
3.2.1 CFG的定义与表示(续1) 例3.2 简单算术表达式的上下文无关文法可表示如下:
N = {E} T = {+,*,(,),-,id} S = E P: E → E + E (1) E → E * E (2) E →(E) (3) (G3.1) E → -E (4) E → id (5)
精品文档

编译原理第三章练习题答案

编译原理第三章练习题答案

编译原理第三章练习题答案编译原理第三章练习题答案编译原理是计算机科学中的重要学科,它研究的是如何将高级语言代码转化为机器语言的过程。

在编译原理的学习过程中,练习题是不可或缺的一部分,通过完成练习题可以更好地理解和掌握编译原理的知识。

本文将为大家提供编译原理第三章练习题的答案,希望对大家的学习有所帮助。

1. 什么是语法分析?语法分析是编译器中的一个重要模块,它的主要任务是根据给定的语法规则,对输入的源代码进行分析和解释。

语法分析器会根据语法规则构建一个语法树,用于表示源代码的结构和含义。

常用的语法分析方法有递归下降法、LL(1)分析法和LR分析法等。

2. 什么是LL(1)文法?LL(1)文法是一种特殊的上下文无关文法,它具有以下两个特点:(1) 对于任何一个句子,最左推导和最右推导是唯一的。

(2) 在预测分析过程中,只需要向前看一个输入符号就可以确定所采用的产生式。

LL(1)文法是一种常用的文法形式,它适用于递归下降法和LL(1)分析法。

3. 什么是FIRST集合和FOLLOW集合?FIRST集合是指对于一个文法符号,它能够推导出的终结符号的集合。

FOLLOW 集合是指在一个句型中,某个非终结符号的后继终结符号的集合。

计算FIRST集合和FOLLOW集合可以帮助我们进行语法分析,特别是LL(1)分析。

4. 什么是递归下降语法分析法?递归下降语法分析法是一种基于产生式的自顶向下的语法分析方法。

它的基本思想是从文法的开始符号开始,递归地根据产生式进行分析,直到推导出输入符号串或发现错误。

递归下降语法分析法的实现比较简单,但对于某些文法可能会出现回溯现象,影响分析效率。

5. 什么是LR分析法?LR分析法是一种自底向上的语法分析方法,它的基本思想是从输入符号串开始,逐步构建语法树,直到推导出文法的开始符号。

LR分析法具有较好的分析效率和广泛的适用性,常用的LR分析方法有LR(0)、SLR(1)、LR(1)和LALR(1)等。

【精选】编译原理语法分析PPT文档

【精选】编译原理语法分析PPT文档
T’→*FT’ | ε
自顶向下分析面临的困难
自顶向下分析的主旨是,对任何输入串,试图用一切 可能的办法,从文法的开始符号(根结)出发,自顶 向下的为输入串建立一棵语法树。 这种分析过程本质上是一种试探过程,是反复使用不 同产生式谋求匹配输入串的过程。 自顶向下分析的一般方法是带“回溯”的。
自顶向下分析的简单例子
这样做很难,这个文法不能够通过向前看一个符号的 自顶向下分析方法来进行语法分析
LL(1)分析法
自顶向下分析存在的问题及解决方法
左递归文法
消除直接左递归
消除直接左递归-提取左因子
消除直接左递归——改写成右递归
直接左递归的消除
P→Pα | β
P→βP’ P’→αP’ | ε
E→E+T | T T→T*F | F F→(E) | i
如果非终结符A的所有候选首符集两两不相交,即A的任何 两个不同候选αi和αj
FIRST(αi) ∩FIRST(αj)=Φ
那么当要求A匹配输入串时,A就能根据它所面临的第一个 输入符号a,准确的指派某一个候选前去执行任务。这个候 选就是那个终结首符集含a的α。
消除回溯、提取左因子
提取左因子的方法
假定A的规则是: A→δβ1 |δβ2 | … |δβn |γ1 |γ2 | … |γm
T’→*FT’
F→i
T’→ε E’→+TE’ T→FT’ F→i
T’→ε E’→ε
i1*i2+i3
预测分析表
分析表的构造
分析表的构造
分析表的构造
分析表的构造
分析表的构造
FIRST集合构造的例子
FIRST(E’)={+,ε} FIRST(T’)={*,ε} FIRST(F)={( , i} FIRST(T)={( , i} FIRST(E)={( , i}

编译原理教程-课后习题答案第三章语法分析ppt课件

编译原理教程-课后习题答案第三章语法分析ppt课件

a. LALR文法 b. LR(0)文法
c. LR(1)文法 d. SLR(1)文法
第三章 语法分析
(8) 同心集合并有能够产生新的 冲突。
a. 归约
b. “移进〞/“移进〞
c.“移进〞/“归约〞 〞
d. “归约〞/“归约
【解答】 (1) c (2) a (3) c (5) b (6) b (7) d (8) d
#⋖ (⋖,⋖ (⋖a⋗)⋗)⋗# 因此,素短语为a。
第三章 语法分析
3.8 下述文法描画了C言语整数变量的声明语句: G[D]: D→TL T→int|long|short L→id|L,id
(1) 改造上述文法,使其接受一样的输入序列, 但文法是右递归的;
(2) 分别用上述文法G[D]和改造后的文法G[D′] 为输入序列int a,b,c构造分析树。
第三章 语法分析
(2) 为了构造字母表Σ={a,b}上同时只需奇数个a 和奇数个b的一切串集合的正规式,我们画出如图3-3 所示的DFA,即由开场符S出发,经过奇数个a到达形状 A,或经过奇数个b到达形状B;而由形状A出发,经过 奇数个b到达形状C(终态);同样,由形状B出发经过奇 数个a到达终态C。
第三章 语法分析
第三章 语法分析
3.1 完成以下选择题:
(1) 文法G:S→xSx|y所识别的言语是 。
a. xyx
b. (xyx)*
c. xnyxn(n≥0)
d. x*yx*
(2) 假设文法G是无二义的,那么它的任何句子α 。
a. 最左推导和最右推导对应的语法树必定一样
b. 最左推导和最右推导对应的语法树能够不同 c. 最左推导和最右推导必定一样
能否不画出语法树,而直接由定义(即在句型中)寻觅满足某 个产生式的候选式这样一个最左子串(即句柄)呢?例如,对句型 aAaBcbbdcc,我们可以由左至右扫描找到第一个子串AaB,它恰好 是满足A→AaB右部的子串;与树(a)对照,AaB确实是该句型的句 柄。能否这一方法一直正确呢?我们继续检查句型aAcbBdcc,由 左至右找到第一个子串c,这是满足A→C右部的子串,但由树(b) 可知,c不是该句型的句柄。由此可知,画出对应句型的语法树然 后寻觅最左直接短语是确定句柄的好方法。

第三章 形式语言与语法分析

第三章 形式语言与语法分析

3.2 上下文无关文法
• 上下文无关文法是一个四元组(VT,VN,S,P)
VT是有限的终极符集合 VN是有限的非终极符集合 S是开始符,S VN P是产生式的集合,且具有下面的形式: AX1X2„Xn 其中AVN,Xi (VTVN )
符号约定:非终极符用大写字母表示 不绝对! 终极符用小写字母表示 开始符是第一条产生式左部的符号
• “” 的含义是,使用一条规则,代替左边的某个符号,产生 右端的符号串
• 推导(+):若通过一步或多步推导可从串导出串, 则称为的推导,并记为 + • 星推导(*):称 * 当且仅当 = 或 +
例子
• (E) (E+T) (应用产生式2) • (E) (T) (应用产生式1) P: • E直接推导出E+T或E直接推导出T (1) E T • E T F (E) (E+T) (T+ (2) E E + T T) (F+T) (i+T) (i+F) (3) T F (i+n) , (4) T T * F • 记作E + (i+n) (5) F (E) • E经过多步推导出i+n (6) F i • E * E (7) F n • E * i +(i) • E经过若干步推导出i+(i)
• 最左推导: i+T*n +F lm i + F*n + F • 最右推导: i+T*n +F rm i + T*n +i • 左句型: i + i*F • 右句型: E+(i)
特别注意
每个句子一定有最右(规范)推导 每个句型不一定有最右(规范)推导
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

id
id
E E+E E E +E id E + E id id + E id id + id E
E +E
E
*
E id
id
id
3.2 语言和文法
• 文法的优点
–文法为语言给出了精确的、易于理解的语法规范 –自动产生高效的分析器 –可以给语言定义出层次结构 –以文法为基础的语言的实现便于语言的修改
FIRST(E) = FIRST(T) = FIRST(F) = { ( , id } FIRST(E ) = {+, } FRIST(T ) = {, } FOLLOW(E) = FOLLOW(E ) = { ), $} FOLLOW(T) = FOLLOW (T ) = {+, ), $} FOLLOW(F) = {+, , ), $}
id
+ term
term * factor
factor
id
id id + id id 分析树
3.2 语言和文法
3.2.5 消除二义性 stmt if expr then stmt
| if expr then stmt else stmt | other • 句型:if expr then if expr then stmt else stmt • 两个最左推导: stmt if expr then stmt if expr then if expr then stmt else stmt stmt if expr then stmt else stmt if expr then if expr then stmt else stmt
3.3 自上而下分析
• LL(1)文法
任何两个产生式A | b 都满足下列条件:
– FIRST( )∩FIRST(b ) = –若b * ,那么FIRST()∩FOLLOW(A) =
• LL(1)文法有一些明显的性质
–没有公共左因子 –不是二义的 –不含左递归
3.3 自上而下分析
• 例 E TE E + TE | T FT T FT | F (E) | id
3.2 语言和文法
3.2.3 验证文法产生的语言 G : S (S ) S | L(G) = 配对的括号串的集合
• 按推导步数进行归纳:推出的是配对括号串
– 归纳基础: S – 归纳假设:少于n步的推导都产生配对的括号串 – 归纳步骤:n步的最左推导如下:
S (S )S * (x) S * (x) y
–正规式不能用于描述配对或嵌套的结构 例1:配对括号串的集合 例2:{wcw | w是a和b的串}
3.1 上下文无关文法
• 上下文无关文法是四元组(VT , VN , S, P)
VT : 终结符集合
VN : 非终结符集合
S:
开始符号
P : 产生式集合, 产生式形式 : A
• 例 ( {id, +, , , (, )}, {expr, op}, expr, P )
若FIRST(i ) 或 FIRST(j )含,还需增加条件
3.3 自上而下分析
3.3.2 LL(1)文法 • 对文法加什么样的限制可以保证没有回溯?
• 先定义两个和文法有关的函数
– FIRST( ) = {a | * a…, a VT} 特别是, * 时,规定 FIRST( )
– FOLLOW(A) = {a | S * …Aa…,aVT} 如果A是某个句型的最右符号,那么结束标记$属 于FOLLOW(A)
• 有左因子的文法
A b1 | b2
• 提左因子
A A A b1 | b2
3.2 语言和文法
• 例 悬空else的文法 stmt if expr then stmt else stmt | if expr then stmt | other
提左因子 stmt if expr then stmt optional_else_part | other optional_else_part else stmt |
3.2 语言和文法
3.2.4 适当的表达式文法 • 用一种层次观点看待表达式
id id (id+id) + id id + id id id (id+id) • 文法 expr expr + term | term term term factor | factor factor id | (expr)
(T+T...+T) (FF直接左递归 S Aa | b A Sd |
• 先变换成直接左递归 S Aa | b A Aad | bd |
• 再消除左递归
S Aa | b A bd A | A A adA |
3.2 语言和文法
3.2.7 提左因子
3.3 自上而下分析
3.3.1 自上而下分析的一般方法 • 例 文法 S aCb C cd | c
为输入串w = acb建立分析树
S
S
S
aCb
a Cb
aCb
c
d
c
不能处理左递归
3.3 自上而下分析
• 不能处理左递归的例子
算术表达文法
EE+T|T
E
TTF|F F ( E ) | id
E+ T
为输入串w = acb建立分析树
S
S
S
aCb
a Cb
aCb
c
d
c
不能处理左递归,需要使用复杂的回溯技术,
回溯导致分析工作推倒重来
3.3 自上而下分析
3.3.1 自上而下分析的一般方法 • 例 文法 S aCb C cd | c
为输入串w = acb建立分析树
S
S
S
aCb
a Cb
aCb
c
d
c
不能处理左递归,需要使用复杂的回溯技术,
• 记号
S *、 S + w
3.1 上下文无关文法
• 例 E E + E | E E | (E ) | E | id
• 最左推导
E lm E lm (E) lm (E + E) lm (id + E) lm (id + id)
• 最右推导(规范推导)
E rm E rm (E) rm (E + E) rm (E + id) rm (id + id)
回溯导致分析工作推倒重来,难以报告出错的
确切位置
3.3 自上而下分析
3.3.1 自上而下分析的一般方法 • 例 文法 S aCb C cd | c
为输入串w = acb建立分析树
S
S
S
aCb
a Cb
aCb
c
d
c
不能处理左递归,需要使用复杂的回溯技术,
回溯导致分析工作推倒重来,难以报告出错的
确切位置,效率低
3.2 语言和文法
expr expr + term | term
term term factor | factor
factor id | (expr)
expr
expr
term
term * factor term * factor id
factor id
id id id id 分析树
expr term factor
E+ T
E+ T
………
3.3 自上而下分析
3.3.1 自上而下分析的一般方法 • 例 文法 S aCb C cd | c
为输入串w = acb建立分析树
S
S
S
aCb
a Cb
aCb
c
d
c
不能处理左递归,需要使用复杂的回溯技术
3.3 自上而下分析
3.3.1 自上而下分析的一般方法 • 例 文法 S aCb C cd | c
• 文法的问题
–文法只能描述编程语言的大部分语法,而不是所 有的语法
3.2 语言和文法
3.2.1 正规式和上下文无关文法的比较
• 正规式
(a|b)*ab
a 开始 0 a 1 b 2
• 文法
b
A0 a A0 | b A0 | a A1
A1 b A2
A2
3.2 语言和文法
• 例 L={anbn | n 1 } S aSb | ab
else unmatched_stmt
3.2 语言和文法
3.2.6 消除左递归
• 文法左递归
A+A
• 直接左递归
– 串的特点
AA |b
b . . .
• 消除直接左递归
A b A A A |
3.2 语言和文法
• 例 算术表达文法 EE+T|T TTF|F F ( E ) | id
消除左递归后文法 E TE E + TE | T FT TFT| F ( E ) | id
源程序
第3章 语法分析
词法 分析器
记号
取下一个 记号
分析器
分析 树
前端的 中间 其余部分 表示
符号表
• 本章内容
– 上下文无关文法 – 自上而下分析和自下而上分析 – 围绕分析器的自动生成展开
3.1 上下文无关文法
3.1.1 上下文无关文法的定义
–正规式能定义一些简单的语言,能表示给定结构 的固定次数的重复或者没有指定次数的重复 例:a (ba)5, a (ba)*
3.1 上下文无关文法
3.1.2 推导
– 把产生式看成重写规则,把符号串中的非终结符 用其产生式右部的串来代替
• 例 E E + E | E E | (E ) | E | id
相关文档
最新文档