第三章 语法分析1
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
30
【例】设有文法G[N]: N →D|ND
D→0|1|2|3|4|5|6|7|8|9 则句子12可由三种不同的推导序列推导出来: (1) N ND N2 D2 12 (2) N ND DD 1D 12 (3) N ND DD D2 12
31
规范推导和规范归约 最左推导和最右推导:对于一个推导序列中的每一步
14
直接推导“” 设α → β是文法G的产生式,若有v,w满足:
v=x α y, w= x β y, 其中x∈V*, y∈V*, V=VT∪VN 则称v直接推导到w, 记作:v w 或w直接归约到v 例:G: S→0S1, S→01
S பைடு நூலகம்S1 00S11 000S111 00001111
34
【例】程序语言中, program→declaration_list declaration_list→declaration_list declaration | declaration
【例】程序语言中, D →TL T →int |long |short L →id| L,id
36
注:1、描述程序设计语言的文法必定都是递归的。 2、递归规则的存在,使得能用有穷个规则来
直接推导,都是对最左(最右)非终结符进行替换。 最右推导也称规范推导,它的逆过程称为最左归约, 也称规范归约。 . 若用 表示归约,设A→a是文法G中的一个规则, 则对于 . xAy xay 有 xay xAy
32
A→A0|1B B→0|S1 请给出句子101001的最左和最右推导。
【例】文法G[S]: S→AB
L →a|b|c|d…|z|A|B…|Z|_
D →0|1|…|9
12
例3.2 写一文法,使其语言是奇数集合,但不 允许出现以0开头的奇数。 N →A|MA M →B|MD
A →1|3|5|7|9
B →1|2|3|4|5|6|7|8|9
D →0|B
13
问题2:如何由文法产生语言?
基本思想是:从识别符号开始,把当前产生的符号 串中的非终结符号替换为相应规则右部的符号串, 直到最终全由终结符号组成。这种替换过程称为推 导或产生句子的过程,每一步称为直接推导或直接 产生。 注:语法上的正确性不能保证语义上的正确性。
最左推导: S AB 1B B10B 10S1 10AB1 101BB1 1010B1 101001 最右推导: S AB AS1AAB1 AA01 A1B01 A1001 1B1001 101001
33
【例】有文法如下,G[E]:E→E+T|T
T→T*F|F F→(E)|i 该文法的开始符号是?非终结符号集是?终结符号 集是?如何得到句子i+i*i? 开始符号是E 非终结符号集是E、T、F 终结符号集是i、(、)、+、* EE+T T+T F+T i+T i+T*F i+F*F i+i*F i+i*i
40
句柄
句型的句柄:一个句型的最左直接短语。 任何句型的句柄总是存在,且惟一。
【例】对于文法G[S]:S→AB A → Aa|bB B → a|Sb 求句型baSb的全部短语、直接短语和句柄? 该句型的短语有Sb、a、ba及自身baSb ;
直接短语有Sb、a;
其中a为句柄。
41
练习
设有文法G[S]: S→aAcBe
28
贯穿词法分析和语法分析的关键思想是: 1、语言的描述和语言的识别是表示语言的两个 不同的侧面。 2、正规表达式适合于描述线性结构,如标识符、 常数、注释等。 3、上下文无关文法适合于描述具有嵌套(层次) 性质的非线性结构,如if、while语句等。
29
3.2 推导和语法树
推导、规范推导 短语、句柄、素短语 语法树 文法的二义性
7
引例2
有如下规则: <标识符>→<字母> <标识符> → <标识符> <字母> <标识符> → <标识符> <数字> <字母> → A <字母> → B <字母> → C <数字> → 0 <数字> → 1
请问:该规则可以产生什么语言?
8
文法的形式化定义
规则的非空有穷集合,用G[S]表示,G是文法名, S是识别符号。文法通常表示成四元组的形式: G=(VN,VT,P,S) 其中:VN—非终结符,用来表示语法范畴。 VT —终结符,语言中不可再分的基本符号。 S —开始符号或识别符号,一个特殊的非终 结符,表示所定义的最大的语法范畴。 P —规则
1型文法
如果对于某文法G,P中每个规则具有下列形式:
xAy→xβy 其中A∈VN,x, y∈ V*, β ∈V+ ,
则该文法G为1型文法或上下文有关文法,
缩写为CSG。 例文法G[S]: S→aSBE EB→BE bB→bb S→aBE aB→ab bE→be
eE→ee
23
2型文法
如果对于某文法G,P中每个规则具有下列形式: A→α 其中A∈VN, α ∈V* , 则该文法G为2型文法或上下文无关文法,缩写为 CFG。 例文法G[E]: E →E+E|E*E|(E)|i 注意:程序设计语言的文法通常是上下文无关的。
1、VN∩VT=Ø,即文法中的任意一个符号要么是非 终结符,要么是终结符。 2、只用一个产生式并不足以定义一个语法范畴, 一般都需要几个产生式,特别是需要含有递归的 产生式。 3、开始符号至少必须在某个产生式的左部出现一 次。
11
例3.1
试构造产生标识符的文法。
I→L|LS
S →T|ST
T →L|D
27
(4)正规表达式可以转换为上下文无关文法, 转换方法见课本P36。正规表达式也可以与正 规文法之间进行转换。 (5)正规表达式用于描述程序语言的词法,上 下文无关文法用于描述程序语言的语法。 为什么要用正规式定义词法 ?
词法规则非常简单,不必用上下文无关文法。 对于词法记号,正规式描述简洁且易于理解。 从正规式构造出的词法分析器(有限自动机)效率 高。
21
0型文法
如果对于某文法G,P中每个规则具有下列形式: α →β 其中α ∈V*VN V*,β ∈ V*, V=VN∪VT
则该文法G为0型文法或短语结构文法,缩写为PSG。 相应的语言称为0型语言或短语结构语言。
例文法G[S]: S→0AB
1B→0 B→SA|01 A1→SB1 A0→S0B
22
15
说明 (1)如果α 1可直接推导出α 2, α 2可直接推导 出α 3,…, α n-1可直接推导出α n,即存在一 个推导序列: α 1 α 2 α 3 … α n-1 α n 则称α 1 可以推导出α n,记做α 1 + α n。 (2)如果α 1 经过0步或若干步可以推导出α n, 记做α 1 * α n。
3
什么是符号与字母表?
字母表:由若干元素(符 号、字母)所组成的有限 非空集合。常用大写英文 字母A,B… 或希腊字母Σ 表示。 符号:可以相互区别的记 号(元素)。
例如:
Σ = {0,1}
V = {a, b,c…z} A={begin,if,real,end}
4
二、形式语言
Chomsky于1956年提出了一种用来描述语言的数学系统。 人们把用一组数学符号和规则来描述语言的方式称为形式 描述,而把所用的数学符号和规则称为形式语言。 形式语言,只是从语法上研究语言。它是抽象的数学系统, 用于模拟程序设计语言的语法,或者是并不很成功地模拟 自然语言如英语的语法。 形式语言理论是编译理论的重要基础,它主要研究组成符 号语言的符号串的集合及它们的表示法、结构与特性。
9
问题1:什么是规则(产生式)?
形式为U::=u (或U→u) 其中U∈V+且至少包含一个非终结符;
u∈V* ;且 V=VN∪VT。 U称为规则(产生式)左部,u称为规则(产生式) 右部。 非终结符号:需要进一步定义的符号,不会出现在 程序中。
终结符号:不需要再定义,会出现在程序中。
10
注意:
定义无穷的语言(的句子)。
37
句型分析的相关基本概念
短语、直接短语、句柄、素短语 句型和句子 语法树和文法的二义性
39
短语和直接短语
设G[S]是一个文法,
w= αβδ 是该文法的一个句型,
如果有S * αAδ , A∈VN , 且 A + β ,β∈V+, 则称β是句型w中相对于A的短语。 如果有S * αAδ , A→β, 则称β是句型w中相对于A的直接短语。
24
3型文法(左线性文法)
如果对于某文法G,P中每个规则具有下列形式:
A→a
或 A→Ba
其中a∈VT*,A、B∈VN,则该文法G为3型文法或正 则文法(正规文法),缩写为RG。 这种形式的正则文法称为左线性文法。 例文法G[S]:S → Bc|Sc B →Ab| Bb A →Aa|a
25
3型文法(右线性文法)
例1:G: S→0S1, S→01 L(G)={0n1n|n≥1}
19
3.1.2 形式语言分类
Chomsky对文法中的规则施加不同限制,将文法 和语言分为四大类: 0型文法(PSG) 0型语言或短语结构语言 1型文法(CSG) 1型语言或上下文有关语言 2型文法(CFG) 2型语言或上下文无关语言 3型文法(RG)3型语言或正则(正规)语言
16
小结:文法和语言的关系
已知描述语言,可以写出(凑出)相应的 文法。 (注意:该文法并不惟一。) 已知文法,可以得到由该文法产生的语言。 (用推导的方法得到的所有句子的集合。)
17
句型和句子
设G[S]是一文法,如果符号串α 是从识别符号S 推导所得的,即 S*α ,α ∈(VT∪VN)*
如果对于某文法G,P中每个规则具有下列形式:
A→a
或 A→aB
其中a∈VT*,A、B∈VN,这种形式的正则文法称 为右线性文法。 例文法G[S]: S → lT T →dT S→l T→l T → lT T→d
26
说明: (1)1型文法中不允许有形如“A→ε ”的产生式存在, 而0、2、3型文法允许该种产生式存在。 (2)0、1型文法的产生式左部存在含有终结符号的符 号串或两个以上的非终结符,而2、3型文法的产生式 左部只允许存在单个的非终结符号。 (3)0型文法的识别系统是图灵机;1型文法的识别系 统是线性界限自动机;2型文法的识别系统是下推自 动机;3型文法的识别系统是有限自动机。
第三章 语法分析 (1)
文法和语言的形式化定义 自上而下分析方法 自下而上分析方法
1
3.1 文法和语言
语言概述 文法概述 形式语言分类
2
3.1.1 语言概述
一、语言
某一字母表上符号串(句子)的集合。 语言研究的三个方面: 语法—构成语言句子的各个记号之间的组合规 律。 语义—按照各种表示方法所描述的各个记号的 特定的含义。 语用—在各个记号所出现的行为中,它们的来 源、使用和影响。
A →Ab|b
B →d
1、考虑句型aAbcde,判断b是否为其一个短语? 2、求句型aAbcde的短语、直接短语和句柄。 短语:Ab、d、aAbcde 直接短语: Ab、d
则称符号串α 是文法G的一个句型。
如果句型α 仅由终结符号组成,即 S * α , α ∈VT* 则称α 是文法G的句子。 例1:G: S→0S1, S→01 S 0S1 00S11 000S111 00001111
句子 句型
18
语言的形式定义
语言 对于文法G[S],它所描述的语言是该文法产生的一 切句子的集合。记做L(G),即 L(G)={ α | S + α ,其中S为文法开始符号,且 α ∈VT*}
5
三、语言的描述方法
形式化描述 指定有限个规则,用于产生所要描述的语言的全部句子, 这些规则构成了该语言的文法。 自动机方法 建立一种装置(算法或过程),它以某字母表上的符号 串为输入,判别该符号串是否为其所描述的语言的句子, 此装置即为自动机。
6
3.1.1 文法概述
引例1:
<句子>::=<主语><谓语><状语> <主语>::=<名词> <谓语>::=<动词> <状语>::=<介词><名词> <名词>::=Peter | Berry | river <动词>::=swims <介词>::=in 注:<句子>为要定义的目标,称为识别符号或开始符号。
【例】设有文法G[N]: N →D|ND
D→0|1|2|3|4|5|6|7|8|9 则句子12可由三种不同的推导序列推导出来: (1) N ND N2 D2 12 (2) N ND DD 1D 12 (3) N ND DD D2 12
31
规范推导和规范归约 最左推导和最右推导:对于一个推导序列中的每一步
14
直接推导“” 设α → β是文法G的产生式,若有v,w满足:
v=x α y, w= x β y, 其中x∈V*, y∈V*, V=VT∪VN 则称v直接推导到w, 记作:v w 或w直接归约到v 例:G: S→0S1, S→01
S பைடு நூலகம்S1 00S11 000S111 00001111
34
【例】程序语言中, program→declaration_list declaration_list→declaration_list declaration | declaration
【例】程序语言中, D →TL T →int |long |short L →id| L,id
36
注:1、描述程序设计语言的文法必定都是递归的。 2、递归规则的存在,使得能用有穷个规则来
直接推导,都是对最左(最右)非终结符进行替换。 最右推导也称规范推导,它的逆过程称为最左归约, 也称规范归约。 . 若用 表示归约,设A→a是文法G中的一个规则, 则对于 . xAy xay 有 xay xAy
32
A→A0|1B B→0|S1 请给出句子101001的最左和最右推导。
【例】文法G[S]: S→AB
L →a|b|c|d…|z|A|B…|Z|_
D →0|1|…|9
12
例3.2 写一文法,使其语言是奇数集合,但不 允许出现以0开头的奇数。 N →A|MA M →B|MD
A →1|3|5|7|9
B →1|2|3|4|5|6|7|8|9
D →0|B
13
问题2:如何由文法产生语言?
基本思想是:从识别符号开始,把当前产生的符号 串中的非终结符号替换为相应规则右部的符号串, 直到最终全由终结符号组成。这种替换过程称为推 导或产生句子的过程,每一步称为直接推导或直接 产生。 注:语法上的正确性不能保证语义上的正确性。
最左推导: S AB 1B B10B 10S1 10AB1 101BB1 1010B1 101001 最右推导: S AB AS1AAB1 AA01 A1B01 A1001 1B1001 101001
33
【例】有文法如下,G[E]:E→E+T|T
T→T*F|F F→(E)|i 该文法的开始符号是?非终结符号集是?终结符号 集是?如何得到句子i+i*i? 开始符号是E 非终结符号集是E、T、F 终结符号集是i、(、)、+、* EE+T T+T F+T i+T i+T*F i+F*F i+i*F i+i*i
40
句柄
句型的句柄:一个句型的最左直接短语。 任何句型的句柄总是存在,且惟一。
【例】对于文法G[S]:S→AB A → Aa|bB B → a|Sb 求句型baSb的全部短语、直接短语和句柄? 该句型的短语有Sb、a、ba及自身baSb ;
直接短语有Sb、a;
其中a为句柄。
41
练习
设有文法G[S]: S→aAcBe
28
贯穿词法分析和语法分析的关键思想是: 1、语言的描述和语言的识别是表示语言的两个 不同的侧面。 2、正规表达式适合于描述线性结构,如标识符、 常数、注释等。 3、上下文无关文法适合于描述具有嵌套(层次) 性质的非线性结构,如if、while语句等。
29
3.2 推导和语法树
推导、规范推导 短语、句柄、素短语 语法树 文法的二义性
7
引例2
有如下规则: <标识符>→<字母> <标识符> → <标识符> <字母> <标识符> → <标识符> <数字> <字母> → A <字母> → B <字母> → C <数字> → 0 <数字> → 1
请问:该规则可以产生什么语言?
8
文法的形式化定义
规则的非空有穷集合,用G[S]表示,G是文法名, S是识别符号。文法通常表示成四元组的形式: G=(VN,VT,P,S) 其中:VN—非终结符,用来表示语法范畴。 VT —终结符,语言中不可再分的基本符号。 S —开始符号或识别符号,一个特殊的非终 结符,表示所定义的最大的语法范畴。 P —规则
1型文法
如果对于某文法G,P中每个规则具有下列形式:
xAy→xβy 其中A∈VN,x, y∈ V*, β ∈V+ ,
则该文法G为1型文法或上下文有关文法,
缩写为CSG。 例文法G[S]: S→aSBE EB→BE bB→bb S→aBE aB→ab bE→be
eE→ee
23
2型文法
如果对于某文法G,P中每个规则具有下列形式: A→α 其中A∈VN, α ∈V* , 则该文法G为2型文法或上下文无关文法,缩写为 CFG。 例文法G[E]: E →E+E|E*E|(E)|i 注意:程序设计语言的文法通常是上下文无关的。
1、VN∩VT=Ø,即文法中的任意一个符号要么是非 终结符,要么是终结符。 2、只用一个产生式并不足以定义一个语法范畴, 一般都需要几个产生式,特别是需要含有递归的 产生式。 3、开始符号至少必须在某个产生式的左部出现一 次。
11
例3.1
试构造产生标识符的文法。
I→L|LS
S →T|ST
T →L|D
27
(4)正规表达式可以转换为上下文无关文法, 转换方法见课本P36。正规表达式也可以与正 规文法之间进行转换。 (5)正规表达式用于描述程序语言的词法,上 下文无关文法用于描述程序语言的语法。 为什么要用正规式定义词法 ?
词法规则非常简单,不必用上下文无关文法。 对于词法记号,正规式描述简洁且易于理解。 从正规式构造出的词法分析器(有限自动机)效率 高。
21
0型文法
如果对于某文法G,P中每个规则具有下列形式: α →β 其中α ∈V*VN V*,β ∈ V*, V=VN∪VT
则该文法G为0型文法或短语结构文法,缩写为PSG。 相应的语言称为0型语言或短语结构语言。
例文法G[S]: S→0AB
1B→0 B→SA|01 A1→SB1 A0→S0B
22
15
说明 (1)如果α 1可直接推导出α 2, α 2可直接推导 出α 3,…, α n-1可直接推导出α n,即存在一 个推导序列: α 1 α 2 α 3 … α n-1 α n 则称α 1 可以推导出α n,记做α 1 + α n。 (2)如果α 1 经过0步或若干步可以推导出α n, 记做α 1 * α n。
3
什么是符号与字母表?
字母表:由若干元素(符 号、字母)所组成的有限 非空集合。常用大写英文 字母A,B… 或希腊字母Σ 表示。 符号:可以相互区别的记 号(元素)。
例如:
Σ = {0,1}
V = {a, b,c…z} A={begin,if,real,end}
4
二、形式语言
Chomsky于1956年提出了一种用来描述语言的数学系统。 人们把用一组数学符号和规则来描述语言的方式称为形式 描述,而把所用的数学符号和规则称为形式语言。 形式语言,只是从语法上研究语言。它是抽象的数学系统, 用于模拟程序设计语言的语法,或者是并不很成功地模拟 自然语言如英语的语法。 形式语言理论是编译理论的重要基础,它主要研究组成符 号语言的符号串的集合及它们的表示法、结构与特性。
9
问题1:什么是规则(产生式)?
形式为U::=u (或U→u) 其中U∈V+且至少包含一个非终结符;
u∈V* ;且 V=VN∪VT。 U称为规则(产生式)左部,u称为规则(产生式) 右部。 非终结符号:需要进一步定义的符号,不会出现在 程序中。
终结符号:不需要再定义,会出现在程序中。
10
注意:
定义无穷的语言(的句子)。
37
句型分析的相关基本概念
短语、直接短语、句柄、素短语 句型和句子 语法树和文法的二义性
39
短语和直接短语
设G[S]是一个文法,
w= αβδ 是该文法的一个句型,
如果有S * αAδ , A∈VN , 且 A + β ,β∈V+, 则称β是句型w中相对于A的短语。 如果有S * αAδ , A→β, 则称β是句型w中相对于A的直接短语。
24
3型文法(左线性文法)
如果对于某文法G,P中每个规则具有下列形式:
A→a
或 A→Ba
其中a∈VT*,A、B∈VN,则该文法G为3型文法或正 则文法(正规文法),缩写为RG。 这种形式的正则文法称为左线性文法。 例文法G[S]:S → Bc|Sc B →Ab| Bb A →Aa|a
25
3型文法(右线性文法)
例1:G: S→0S1, S→01 L(G)={0n1n|n≥1}
19
3.1.2 形式语言分类
Chomsky对文法中的规则施加不同限制,将文法 和语言分为四大类: 0型文法(PSG) 0型语言或短语结构语言 1型文法(CSG) 1型语言或上下文有关语言 2型文法(CFG) 2型语言或上下文无关语言 3型文法(RG)3型语言或正则(正规)语言
16
小结:文法和语言的关系
已知描述语言,可以写出(凑出)相应的 文法。 (注意:该文法并不惟一。) 已知文法,可以得到由该文法产生的语言。 (用推导的方法得到的所有句子的集合。)
17
句型和句子
设G[S]是一文法,如果符号串α 是从识别符号S 推导所得的,即 S*α ,α ∈(VT∪VN)*
如果对于某文法G,P中每个规则具有下列形式:
A→a
或 A→aB
其中a∈VT*,A、B∈VN,这种形式的正则文法称 为右线性文法。 例文法G[S]: S → lT T →dT S→l T→l T → lT T→d
26
说明: (1)1型文法中不允许有形如“A→ε ”的产生式存在, 而0、2、3型文法允许该种产生式存在。 (2)0、1型文法的产生式左部存在含有终结符号的符 号串或两个以上的非终结符,而2、3型文法的产生式 左部只允许存在单个的非终结符号。 (3)0型文法的识别系统是图灵机;1型文法的识别系 统是线性界限自动机;2型文法的识别系统是下推自 动机;3型文法的识别系统是有限自动机。
第三章 语法分析 (1)
文法和语言的形式化定义 自上而下分析方法 自下而上分析方法
1
3.1 文法和语言
语言概述 文法概述 形式语言分类
2
3.1.1 语言概述
一、语言
某一字母表上符号串(句子)的集合。 语言研究的三个方面: 语法—构成语言句子的各个记号之间的组合规 律。 语义—按照各种表示方法所描述的各个记号的 特定的含义。 语用—在各个记号所出现的行为中,它们的来 源、使用和影响。
A →Ab|b
B →d
1、考虑句型aAbcde,判断b是否为其一个短语? 2、求句型aAbcde的短语、直接短语和句柄。 短语:Ab、d、aAbcde 直接短语: Ab、d
则称符号串α 是文法G的一个句型。
如果句型α 仅由终结符号组成,即 S * α , α ∈VT* 则称α 是文法G的句子。 例1:G: S→0S1, S→01 S 0S1 00S11 000S111 00001111
句子 句型
18
语言的形式定义
语言 对于文法G[S],它所描述的语言是该文法产生的一 切句子的集合。记做L(G),即 L(G)={ α | S + α ,其中S为文法开始符号,且 α ∈VT*}
5
三、语言的描述方法
形式化描述 指定有限个规则,用于产生所要描述的语言的全部句子, 这些规则构成了该语言的文法。 自动机方法 建立一种装置(算法或过程),它以某字母表上的符号 串为输入,判别该符号串是否为其所描述的语言的句子, 此装置即为自动机。
6
3.1.1 文法概述
引例1:
<句子>::=<主语><谓语><状语> <主语>::=<名词> <谓语>::=<动词> <状语>::=<介词><名词> <名词>::=Peter | Berry | river <动词>::=swims <介词>::=in 注:<句子>为要定义的目标,称为识别符号或开始符号。