第二章 文法和语言基本知识
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
它显然比较复杂,因此:
在能驾驭的情况下,可以使用二义性文法。
2.7 文法的实用限制
化简了的文法(限制条件)
1.产生式: A→A P ; 2. 每个非终结符号A必须都有用处。即,
* S αAβ , 且 A
+ * γ, γ ∈ V T
2.6 文法和语言分类
语言的分类:
对文法中的规则施加不同的限制 四种类型: 0型,1型,2型,3型
1. 2. 3. 4. 5. • • • • 符号串的连接 εy=yε=y 集合的乘积 {ε}A=A{ε}=A 符号串的幂运算 y0=ε y1=y y2=yy 集合的幂运算 A0={ε} A1=A A2=AA 集合A的闭包A*与正闭包A+ ∑的闭包∑*: ∑上所有符号串的全体 例如,若 ∑={a,b}, 则∑+={a,b,aa,ab,ba,bb,aaa,…} 则∑*={ε,a,b,aa,ab,ba,bb,aaa,…}= ∑0 U ∑+
设L和M是两个符号串集合,则
1.合并:L∪M={s|sL or sM} 2.乘积:LM={ st|sL and tM} 3.幂: L0={ε }, L1=L, L2=LL, ..., Ln=LLn-1 4. L的闭包,记作L*, L*=∪Li(i>=0) =L0∪L1∪L2∪L3 ∪… 5.L的正则闭包,记作L+(L+=L L*) L+=∪Li(i >=1) =L1∪L2∪L3∪L4∪…
0型(无限制):G=(VT,VN,S,P) 规则形式 : , (VTVN)*, 并且至少含有一个非终结符号; 1型(上下文有关) : A u u (V V )+, A u ,S 除外; 2型(上下文无关):规则形式 : A A VN, (VTVN)* ; 3型(右线性): A B或 A (左线性) A B 或 A , VT*, A,B VN
+ 有推导A A… + A …A + A …A…
注:语言是无穷集合,描述的文法一定是递归的。
2.4 短语、直接短语、句柄
短语: 设文法G=(VT,VN,P,S) * + 若有 S αAδ 且 A β, 则称β是句型αβδ相对于非终结符A的短语。
* 若S αAδ 且A=>β,则称β是直接短语。
例如:L={A~Z,a~z} D={0~9} 1.L∪D={A~Z,a~z ,0~9} 2.LD是由所有用一个字母后跟一个数字组成的符 号串所构成的集合。 3.L4是由所有的四个字母的符号串构成的集合。 4.L(L∪D)* 是由所有的字母开头的字母和数字 组成的符号串所构成的集合。 5.D+是由所有的长度大于等于1的数字串所构成的 集合。
a 2 S 5
a 9
A3 b 6 A 7
b 10
S 4
8 a 11 a
如何画出分析树
(自顶向下)
根据推导序列,对每步推导画相应分枝
S aAS aSbAS aabAS aabbaS aabbaa S a S a A b A S a a
b
如何画出分析树
(自底向上)
根据归约序列,对每步归约画相应分枝 S aAS aAa aSbAa aSbbaa aabbaa
• 等价文法
2.3.3 语言的形式定义 1、直接推导
令G=(VT,VN,S,P), 若Aγ∈P,
且,β,γ ∈(VT∪VN)*,则称 Aβ直接推导出 γβ,表示成
Aβ γβ 2、推导
如果存在一个直接推导序列: 0 1 2 … n(n>0) 称为 0至 n的一个长度为n的推导, 表示成 0
对于句子a+a*a, 有如下两个最左推导:
EE+E a+E a+E*E a+a*E a+a*a E E*E E+E*E a+E*E a+a*E a+a*a
EE+E a+E a+E*E a+a*E a+a*a
E E*EE+E*E a+E*Ea+a*E a+a*a
S a
A
b b A a
S
a
S
a
关于分析树的几点说明
1. 一个句型推导或分析用一棵树结构图示 出来,它反应了一个句型语法结构的层次。
2. 对于一个句子的多种推导(若文法是无二义 性的),采用各种推导过程,画出的分析树是 一样的。分析树并未描述推导过程,它是不同 推导过程的抽象共性。 3. 在书中,用画分析树的过程解释语法分析过 程,用分析树图解语法结构。
2、 子树
一棵分析树中一个特有的结点连同它的全部后裔, 连接这些后裔的边以及这些结点的标记。例如: S a A S
3、简ቤተ መጻሕፍቲ ባይዱ 子树
S
a
b
b
A
a
a
与短语等概念 的对应关系
2.5.2 文法的二义性( ambiguity)的定义
一个句型是否只对应一颗语法树? 考虑表达式下面的文法 G[E],其产生式如下: EE+EE*E (E) a
+
文法对应的语言示例:
见课本p16,例2.7—2.9 S → 01 | 0S1 S → 0S | 1S | ε
A → yB
例
B → xB | x
S → aB | bA A → a | aS B → b | bS | | bAA aBB
2.3.4 规范推导和规范归约 • 最左推导: 推导中的每一步β,都是替换中最 左的非终结符号。 例如:EE+T T+T F+T a+T a+T*F a+F *F a+a *F a+a*a • 最右推导:推导中的每一步β,都是替换中最右 的非终结符号。 例如:EE+T E+T *F E+ T*a E+F*aE+a*a T+a*a F+a*a a+a*a
E→ T|E+T
T→ F|T*F
F→ (E)|i
例如,对于条件语句,经常使用二义性文法描述它: S if expr then S if expr then S else S other 二义性的句子: if c1 then if c2 then S1 else S2 下面是描述if语句的无二义性文法的产生式: Smathed_s unmathed_s mathed_s if expr then mathed_s else mathed_s other unmathed_s if expr then S if expr then mathed_s else unmathed_s
+
n
3、 广义推导
0
*
n 表示 0 = n或者 0
+ n
2.3.3 语言的形式定义
4、句型和句子
设有文法 G=(VT,VN,S, P)。 * 如果S ,则称是一个句型。
仅含终结符号的句型是一个句子。
5、语言
由文法G产生的所有句子所组成的集合就是语言L(G)。 L(G)={ |S 且 ∈VT*} 注: L(G)是VT*的子集
3
语言对应的文法示例:
例,定义一类含+、 *的算术表达式如:‚变量是一个算术表达 式;若E1和E2是算术表达式,则E1+E2、 E1*E2和(E1)也是算术 表达式。‛ 用产生式描述为: E→ i
E→E+E E→ E*E E→ (E)
见课本p12-14,例2.1—2.4 例2.1 ∑={a,b} 语言 L={a2n,b2n | n≥1}对应文法? 例2.2 表示所有标识符的文法? 例2.4 ∑={a,b} 语言L={abna | n≥0}对应文法?
2.3.4 规范推导和规范归约
• 最左推导: 推导中的每一步β,都是替换中最左的非终结符号。
•
最右推导:推导中的每一步β,都是替换中最右的非终结符号。
• 规范推导、规范句型 • 归约:推导的逆过程 β • 规范归约(最左归约)
.
2.3.5 递归规则与文法的递归性 1、递归规则 规则形如: A → A… 或 A → … A 或 A → …A… 2、文法的递归性
• 文法:描述语言的语法结构的形式规则。 • 上下文无关文法(Context-free Grammar ): 即文法所定义的语法范畴(语法单位)完全 独立于这种范畴可能出现的环境。
2.3.2 文法的形式定义 1. 规则(Backus-Naur Form,简记为BNF)
规则:也叫产生式,是一个符号与一个符号串的 有序对(A,β),通常写作: A→β (或A ::= β)
2.2 字母表和符号串的基本概念
2.2.1 字母表和符号串
1、字母表:元素的非空有穷集合。 2、符号:字母表∑中的元素。 3、符号串(字) • 符号串:字母表∑中的符号所构成的一个有穷序列。 • 空字ε :不包含任何符号的序列。 • φ :不含任何元素的空集{}
2.2 字母表和符号串的基本概念
2.2.2 符号串的运算
2.2 字母表和符号串的基本概念
2.2.1 字母表和符号串
1、字母表 字母表:字母表是元素的非空有穷集合。 任何程序语言都有自己的字母表,例如: • 机器语言:由符号“0”和“1”组成的字母表,∑={0,1} • ASCII字符集; • C语言字母表为: ∑= {AZ, az, 09, +, -, *, /, <, =, >,:, ‘,’, ; ,.,!, ~,%,&, ¦ ,^, (, ), {, },[, ] }
其中,A是规则的左部, β是规则的右部
→表示生成或定义为
• 语言的语法结构用一组规则来表示。
• 终结符号、非终结符号
例 赋值语句→变量=表达式
2. 文法 文法是规则的非空有穷集合,通常表示成四元式 G= (VT,VN , S, P ),其中: VT是一个非空有穷终结符号集合; VN是一个非空有穷的非终结符号集合, 且VT∩VN=Φ; P是一个产生式的非空有穷集合,每个产生式的形式是 A (或A ::= ),其中 A∈VN, ∈(VT∪VN)*。 S VN ,称为开始符号,S必须至少在某个产生式的左部 出现一次 。 左部相同的产生式可以缩写成:A 1| 2| •文法是对语言结构的定义和描述,规则是其关键。
句柄:一个句型的最左直接短语。
2.5 语法树与二义性
2.5.1 推导和语法树 1、语法树:用一张图来表示一个句型 的推导,这张图称为语法树,也称推导树。
语法树有助于理解句子(句型)语法结构的 层次。 语法树通常表示成一颗倒立的树,根 在上,枝叶在下。
例 G=(VT,VN,S,P), 其中
P: SaASa A SbA SS ba S 1
2.3
文法和语言的形式定义
2.3.1 形式语言
• 形式语言:符号串的集合
不考虑语义
程序←→符号串 • 有穷集合的语言描述:枚举法 • 无穷集合的语言描述:文法(含递归) 例 ∑={0,1} , 则集合 ∑+表示为递归文法: A→0 A →1 A→A0 A →A1
2.3
文法和语言的形式定义
2.3.2 文法的形式定义
E
E + E
最左推导 E
E
* E a E
E a a
*
E
a
E a
+
a
EE+E E+E*E E+E*a E+a*a a+a*a E E + E
E E*EE*a E+E*aE+a*a a+a*a E E * E a a E
最右推导 E a +
E
a a
*
E
a
结论:
一个句型可能有不止一个最左(最右)推导, 对应不同的语法树,可以用完全不同的办法生 成一个句型。
第二章 文法和语言基本知识
本章知识点: • • • • • • 字母表和符号串的概念 文法和语言的形式定义 直接推导、推导、句型、句子 短语、直接短语、句柄 语法树、文法的二义性 了解文法和语言的分类
2.1 概述
• 编译程序是针对某种程序设计语言的。
• 程序设计语言的精确定义和描述: – 语法:语言结构的定义 – 语义:描述语言的含义 – 语用:从使用的角度来描述语言 • 非形式化描述 • 形式化描述:用一整套带有严格规定的符号体 系来描述问题。
如果一个文法存在某个句子对应两棵不同的语法树, 则称这个文法是二义的。 也就是某个句子有两个不同的最左(最右)推导。
人们已经证明,二义性问题是不可判定的。
为无二义性找寻一组充分条件 例如文法 G[E],其产生式如下:
EE+EE*E (E) i 是二义性文法,加 上限制规则:‘*’优先级高于‘+’且都 服从左结合,则有无二义文法如: