上下文无关文法自顶向下分析专题培训课件

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
若α1≠αn,即推导过程中至少使用一次产生式,则称此过程为 至少一步推导,记为:α1=+>αn。
两点注意: α,有α=*>α,即推导具有自反性; 若α=*>β,β=*>γ,则α=*>γ,即推导具有传递性。
6
3.2 上下文无关文法(CFG)
定义3.3 由CFG G所产生的语言L(G)被定义为: L(G) = { ω┃S=+>ω and ω∈T* }, L(G)称为上下文无关语言(Context Free Language,
A→α,其中A∈N(左部),α∈(N∪T)*(右部), 若α=ε,则称A→ε为空产生式(也可以记为A →); (4) S是非终结符,称为文法的开始符号(Start symbol)。
2
3.2 上下文无关文法(CFG)
[例3.2] 简单算术表达式的上下文无关文法可表示如下:
N = {E} T = {+,*,(,),-,id} S = E
上下文无关文法的相关概念
3.2 上下文无关文法(CFG)
CFG的定义与表示
上下文无关文法,Context Free Grammar,CFG 定义3.1 CFG是一个四元组:
G =(N,T,P,S),其中 (1) N是非终结符(Nonterminals)的有限集合; (2) T是终结符(Terminals)的有限集合,且N∩T=Φ; (3) P是产生式(Productions)的有限集合,形如:
a
A1 → bA2
a
b
b
A2 → bA3 A3 → ε
0
1
2
3
b
9
3.3 语言与文法简介
2. 为什么用正规式而不用CFG描述词法? ① 词法规则简单,用正规式描述已足够; ② 正规式的表示比CFG更直观、简洁、易于理解; ③ 有限自动机的构造比下推自动机简单,且分析效率高; ④ 区分词法和语法,为编译器前端的模块划分提供方便。 贯穿词法分析和语法分析始终的思想: ① 语言的描述和语言的识别是表示一个语言的两个不同侧面,
程序设计语言中除了CFG可以描述的结构之外,还有一些是 CFG无法描述的所谓上下文有关的结构。
典型的这类语言结构包括:变量的声明与引用、过程调用时形 参与实参的一致性检查等。
描述它们的文法被称为上下文有关文法(Context Sensitive Grammar, CSG)。
α1 α2 α3
Hale Waihona Puke Baidu
α4
α5 α6
α6是句子,所有αi (i=1...6)均是句型。
7
语言与文法简介
3.3 语言与文法简介
正规式与上下文无关文法
1. 正规式到CFG的转换
推论3.1 正规式描述的语言结构均可用CFG描述,反之不一定
从正规式到CFG的对应关系:
① 构造正规式的NFA;
② 若0为初态,则A0为开始符号;
E → -E
(4)
T={+,*,(,),-, id}
E → id
(5)
产生式表示也被称为巴克斯范式(Backus-Naur Form, BNF),其中→用::=表示
4
3.2 上下文无关文法(CFG)
CFG产生语言的基本方法-推导
CFG(产生式)通过推导的方法产生语言。
通俗地讲,产生式产生语言的过程是从开始符号S开始,对产 生式左部的非终结符反复地使用产生式:将产生式左部的非 终结符替换为右部的文法符号序列(展开产生式,用标记 =>表示),直到得到一个终结符序列。
二者缺一不可;(语言、文法、自动机) ② 用正规式和CFG描述的语言,对应的识别方法(自动机)
不同; ③ 正规式适合描述线性结构,如标识符、关键字、注释等;
CFG适合描述具有嵌套(层次)性质的非线性结构,如不 同结构的句子if-then-else、while-do等。
10
3.3 语言与文法简介
上下文有关语言 Context Sensitive Language, CSL
5
3.2 上下文无关文法(CFG)
定义3.2 利用产生式产生句子的过程中,将产生式A→γ的右部 代替文法符号序列αAβ中的A得到αγβ的过程,称αAβ直接推 导出αγβ,记作:αAβ=>αγβ。
若对于任意文法符号序列α1,α2,...αn,均有α1=>α2=>...=>αn, 则称此过程为零步或多步推导,记为: α1=*>αn,其中α1=αn的情况为零步推导。
CFL),ω称为句子。 若S=*>α,α∈(N∪T)*,则称α为G的一个句型。
定义3.4 在推导过程中,若每次直接推导均替换句型中最左边 的非终结符,则称为最左推导,由最左推导产生的句型被称 为左句型。
类似可定义最右推导与右句型,最右推导也被称为规范推导。
E => -E => -(E) => -(E+E) => -(id+E) => -(id+id)
③ 对于move(i,a)=j,引入产生式Ai→aAj;
经验的方法:
④ 对于move(i,ε)=j,引入产生式 Ai→Aj; ⑤ 若i是终态,则引入产生式Ai →ε。 [例3.11] 从正规式r=(a|b)*abb的NFA构造CFG:
A → HT H →ε| Ha | Hb T → abb
A0 → aA0|bA0|aA1
P: E → E + E (1)
E → E * E (2)
E →(E) (3) (G3.1)
E → -E
(4)
E → id
(5)
1. 产生式的一般读法
记号 → 读作“定义为”或者“可导出”。
“E → E + E” 表述为“算术表达式定义为两个算术表达式 相加”;或者“一个算术表达式加上另一个算术表达式, 仍然是一个算术表达式”。
[例3.4] 用(G3.2)产生终结符序列-(id+id)可如下:
E → E + E (1) | E * E (2) |(E) (3) (G3.2) | -E (4) | id (5)
E => -E
by(4)
=> -(E)
by(3)
=> -(E+E) by(1)
=> -(id+E) by(5)
=> -(id+id) by(5)
3
3.2 上下文无关文法(CFG)
2. 由产生式集表示CFG
前提: 若文法正确
结论: 文法开始符号S是第一个产生式的左部;
N是可以出现在产生式左边符号的记号集合;
T是绝不出现在产生式左边符号的记号集合;
P: E → E + E (1)
E → E * E (2) S=E
E →(E) (3) N={E}
相关文档
最新文档