Chapter4 - 词法分析复习

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

非确定有限自动机
非确定有限自动机(NFA) M是一个五元式 a,b M=(S, , f, S0, Z) a,b 0 1 S: 有穷状态集 aa 有穷的输入字母表 bb f:状态转换函数 S0S是非空的初态集 a,b 终态集Z,ZS,可空 2 识别所有含相继两个a NFA的不确定性 或相继两个b的字 状态转换函数为S*2S的部分映射(非单值)


〈表达式〉〈运算符〉 a 〈表达式〉* a 〈表达式〉〈运算符〉〈表达式〉 * a 〈表达式〉〈运算符〉a * a 〈表达式〉+ a * a a + a * a 最右推导2 〈表达式〉〈表达式〉〈运算符〉〈表达式〉 〈表达式〉〈运算符〉 〈表达式〉〈运算符〉〈表达式〉 〈表达式〉〈运算符〉〈表达式〉〈运算符〉 a 〈表达式〉〈运算符〉〈表达式〉 * a 〈表达式〉〈运算符〉a * a 〈表达式〉+ a * a a + a * a
D b a F
其中 S={i,1,2} A={1,2,3} B={1,2,4} C={1,2,3,5,6,f} D={1,2,4,5,6,f} E={1,2,4,6,f} F={1,2,3,6,f}
FM 是DFA M的状态转换函数,定义如下: FM (S,a)=A FM (S,b)=B FM (A,a)=C FM (A,b)=B FM (B,a)=A FM (B,b)=D FM (C,a)=C FM (C,b)=E FM (D,a)=F FM (D,b)=D FM (E,a)=F FM (E,b)=D FM (F,a)=C FM (F,b)=E
复 习 一
编译程序与程序语言
编译程序是指能够把源语言程序转换成目标语言 程序的一个程序,且两种语言程序逻辑上等价 一个程序设计语言的基本功能是描述数据和对数 据的运算 程序语言的语法范畴一般包括:表达式、语句、 分程序、函数、过程和程序等 单词符号是语言中具有独立意义的最基本结构, 它一般包括:基本字、标识符、常数、运算符和 界符等 中间代码是一种含义明确、便于处理的记号系统, 通常独立于具体的硬件 遍是指对源程序及其中间结果从头到尾扫描一次, 加工处理,生成新的中间结果或目标程序
EB→BE aB→ab bB→bb bE→be eE→ee 请给出G8(S)的语言? 解答:
(S→aBE) (EB→BE) (aB→ab) (bB→bb) (bE→be) (eE→ee)
L(G8)={ anbnen | n≥1}, 上下文有关文法
根据语言构造文法一
构造一个文法G4使L(G4)={anbn︱n≥1}
证法二: 根据上述状态转换图,可以构造确定有限自动机 DFA M=〈{S,U,V,Q},{a,b},FM,S,{Q}〉。 其中, FM 是DFA M的状态转换函数,定义如下:
FM (S,a)=U FM (S,b)=V FM (U,a)=QFM (U,b)=V FM (V,a)=U FM (V,b)=Q FM (Q,a)=QFM (Q,b)=Q
观察文法特点
每个句子中,a与b的个数必须相同
根据经验猜测文法
G4: S→ aSb ∣ab
根据语言构造文法二
给出产生语言为{anbm|1nm2n}的文法 解答:
G7(S): S aSb | aSbb S ab
根据语言构造文法三
给出生成下述语言的上下文无关文法: (1){ anbnambm| n,m>=0} (2){ 1n0m1m0n| n,m>=0}
逐级“包含”关系
文法的形式化说明
0型文法
对任一产生式α →β ,都有
α ∈(VN∪VT)*且至少含有一个非终结符 β ∈(VN∪VT)*
1型文法
除S→ε 外,对任一产生式α →β 都有|α |≤|β | S不得出现在任何产生式的右部
2型文法
对任一产生式α →β ,都有
* T
例:E(E)(E+E)(E*E+E)(i*E+E)(i*i+E) (i*i+i) 句型:E,(E),(E+E),(E*E+E),(i*E+E),(i*i+E),(i*i+i) 句子:(i*i+i) 终结符号集 VT = { i,+,*,(,) }
文法定义的语言一
文法G2:S→bA,A→aA∣a 推导过程
∵a,b∈∑∴baab∈∑* 由题意可知:
对于t=baab, DFA M存在一条经过S、V、U、Q和Q的 通路,使得该通路上所有弧的标记符连接成的字等于t。
因此,t 被DFA M所接受。
题:下图是一个NFA的状态转换图,请将 其转化为一个DFA。
解:采用NFA确定化算法(或子集法)。
确定有限自动机
确定有限自动机(DFA) M是一个五元式 M =(S, , f, S0, Z) 有穷状态集S 有穷的输入字母表,每个元素称为一个输入字符 状态转换函数f,f(s,a) = s’ S0S是唯一的初态 终态集Z,ZS,可空 DFA的确定性 状态转换函数f是一个SS的单值部分映射 若f是一个多值函数且初态不唯一,则M是非确定有限自动机 f(s,a) = s’ 表示:输入字符a,则现行状态s将转换到下一状态s’ s’称为s的一个后继状态 f(s,a)唯一地确定了下一状态
α ∈VN β ∈(VN∪VT)*
3型文法
任一产生式α →β 的形式都为A→aB或A→a
A∈VN B∈VN a∈VT*
随着对 产生式 的约束 条件逐 渐增强, 文法描 述语言 的能力 逐渐减 弱
字符串识别
一个状态转换图可用于识别(或接受)一定的字符串
字母或数字 字母 其他 数字
状态集合I的ε-闭包表示为ε-closure(I)。 状态集I中任何状态S经任意条ε弧而能到达的状态集 S∈ε-closure(I)。 状态集合I的a弧转换表示为move(I,a),定义为状态集合J, 其中:J是所有那些可从I中的某一状态经过一条a弧而到 达的状态的全体。 Ia = move(I,a) = ε-closure(J)。
编译程序的工作过程
源程序 表
词法分析器 单词符号
语法分析器 语法单位



语义分析与中间代码生成器
管 优化器 理 中间代码 目标代码生成器 目标代码 理 中间代码 处
编译五个阶段、表格管理和出错处理任务模块的功能
连接积与推导
区分ε ,{ε },Φ Σ ={a,b} Σ * ={ε ,a,b,aa,ab,aabba,…} x=ab,y=cd 则 xy=abcd a0=ε ,a1=a, a2=aa A直接推出,即:A,仅当A是一个产生式, 且,* 如果12…n,则称这个序列是从1到n的一个推导 若存在一个从1到n的推导,则称1可以推导出n 最左推导和最右推导
最右推导1 〈表达式〉〈表达式〉〈运算符〉〈表达式〉
语言与文法
语言的有穷表示有两种途径
生成方式 (文法)
语言中的每个句子可以用严格定义的规则来构造
识别方式(自动机)
描述字符串的识别过程
Chomsky将文法分成四种类型
0型文法:短语文法 1型文法:上下文有关文法 2型文法:上下文无关文法 3型文法:正规文法
ቤተ መጻሕፍቲ ባይዱ
正规式例题
令={a,b},请写出上的正规式和正规集
正规式 正规集 {}

a ab ab a (ab)(ab) (ab)
(ab)(aabb)(ab)

{a} {a,b} {ab} { ,a, aa, ……, 任意个a的串} {aa, ab, ba, bb} { , a, b, aa, ab, ……, 所有由a和b 组成的串} {上所有含有两个相继的a或 两个相继的b组成的串}
文法定义的语言三
文法G3:S→AB,A→aA∣a,B→bB∣b 推导过程
SABab SABaABaAbaaba2b SABabBabbab2 …
归纳得出
L(G3)={ambn︱m,n≥1}
文法定义的语言四
若已知文法G8(S):
S→aSBE S→aBE
S→aSBE S→aaBEBE S→aaBBEE S→aabBEE S→aabbEE S→aabbeE S→aabbee
因此得出上表 。 根据上述NFA的状态转换图及其确定化过程,可以构造与 它等价的DFA M。
DFA M=〈{S,A,B,C,D,E,F},{a,b},FM,S,{C,D,E,F}〉
这个DFA M的状态转换图见下图所示。 a a S b b B A a a C a a b E b
b b
* 2 0
0
1
数字
1
其他
2
*
识别标识符的状态转换图
识别整常数的状态转换图
终结符上的星号“*”
读进不属于标识符部分的字符,则把它退还给输入串
正规式和正规集的递归定义
上的正规式:有限次使用下述三步骤而得到的表达式 和都是上的正规式 任何a ,a是上的一个正规式 假定U和V都是上的正规式 (UV),(UV),(U)也都是正规式 上的正规集:由上述正规式所表示的字集 和都是上的正规式 它们所表示的正规集分别为{}和 任何a ,a是上的一个正规式 它所表示的正规集为{a} U和V都是上的正规式 L(U)和L(V)是正规集 L(UV),L(UV),L(U)也都是正规集
上下文无关文法
一个上下文无关文法G是一个四元式(VT,VN,S,ρ) 例:G1= < { i,+,*,(,) },{E},E, ρ > 终结符号集 VT = { i,+,*,(,) } 非终结符号集 VN = {E} 开始符号 S = E 产生式集ρ→ E+E︱ E*E ︱(E)︱i E E+E E E*E E (E) E I 一个CFG如何定义一个语言呢?
SbAba SbAbaAbaa … SbAbaA…ba…a
归纳得出
L(G2)={ban︱n≥1}
文法定义的语言二
若已知文法G6(A): A c|Ab 请给出G6(A)的语言? 解答:
以c开头,后继若干个b L(G6)={c,cb,cbb,}={cbn︱n≥1}
从开始符号出发,反复使用产生式,对非终结符施行替换和展开
CFG的句型
定义:假定G是一个文法,S 是它的开始符号 * 。如果 S ,则称一个句型。仅含终 结符号的句型是一个句子。文法G所产生的句 子的全体是一个语言,将它记为 L(G)。
L(G ) { | S , V }
0
a
1
b
a
2
{ambn | m,n1}
b
题:证明t=baab被下图的DFA所接受。
证法一: ∵a,b∈∑ ∴baab∈∑* f(S,baab) = f(f(S,b),aab) = f(V,aab) = f(f(V,a),ab) = f(U,ab) = f(f(U,a),b) = f(Q,b) = Q。 Q属于 终态,故得证。
G1(S) S→AA A→aAb|ε
G2(S) S→1S0|A
A→0A1|ε
文法二义性证明
请证明下述文法G(<表达式>)是二义的 <表达式>∷= a | (<表达式>) | <表达式> <运算符> <表达式> <运算符>∷= + | - | * | /
若一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义的 提示:例证法。为句子a+a*a构造两个不同的最右推导。
相关文档
最新文档