编译原理 3.2正规文法和状态转换图

合集下载

《编译原理》第3章

《编译原理》第3章

NFA到相应的DFA的构造的基本思路是: DFA的每 一个状态对应NFA的一组状态. DFA使用它的状 态去记录在NFA读入一个输入符号后可能达到的 所有状态.
NFA M所能接受的符号串的全体记为L(M)
结论:
上一个符号串集V是正规的,当且仅当存 在一个上的不确定的有穷自动机M,使得 V=L(M)。
DFA是NFA的特例.对每个NFA N一定存在一个DFA M,使得 L(M)=L(N)。对每个NFA N存在着与之 等价的DFA M。 有一种算法,将NFA转换成接受同样语言的DFA.这 种算法称为子集法. 与某一NFA等价的DFA不唯一.
0
1
S P
Z
{P} {}
{P}
{S,Z} {Z}
{P}
• δ为S * 到S的子集(2 S)的一种映射
• 从NFA的矩阵表示中可以看出,表项通常是一状态的集合, 而在DFA的矩阵表示中,表项是一个状态
∑*上的符号串t被NFA M接受:
• 对于Σ*中的任何一个串t,若存在一条从某一初态 结点到某一终态结点的道路,且这条道路上所有 弧的标记字依序连接成的串(不理采那些标记为ε 的弧)等于t,则称t可为NFA M所识别(读出或接 受)。 • 若M的某些结点既是初态结点又是终态结点;或 者存在一条从某个初态结点到某个终态结点的道 路,其上所有弧的标记均为ε,那么空字ε可为M所 接受。
其中: δ(S,0)={P}
δ(S,1)={S,Z} δ(Z,0)={P} δ(Z,1)={P} δ(P,1)={Z} • 状态图表示
1 1 S 0 0,1 Z
P
1
• 矩阵表示
状态 输入
δ(S,0)={P} δ(S,1)={S,Z} δ(Z,0)={P} δ(Z,1)={P} δ(P,1)={Z}

编译原理词法分析及词法分析程序

编译原理词法分析及词法分析程序
∴M能识别出L(G)中的全部句子。
状态图=>右线性文法
文法G[0] 0->a1
d 0
S->aA A->dA A->b
a c
1 2
b
d
3
1->d1 1->b
0->c
0->c2 2->d
S->c
S->cB,2有出弧 B->d
左线性文法=>状态转换图
设G=(VN,VT,P,S)是一左线性文法,令|VN|=K, 1) 则所要构造的状态转换图共有K+1个状态. 2) VN中的每个符号分别表示K个状态 2.1) G的开始符S为终止状态 3) 起始状态,用R(VN)标记
识别符号串与归约
S





从初态R到下一状态A对应Ba,即终结 符a归约成非终结符B; U 从状态B转换到状态A对应ABa,即将 Ba归约为A; 状态A转换到状态S(终态)对应S Aa,即 U 将Aa归约为开始符S. 归约成功,恰好进入终态,即状态转换图识 U 别了(或接受)该符号串. 识别00011的例子的归约过程
f是转换函数,是在K×Σ →K上的映像,即:如果f(ki,a)=kj, (ki,kj∈K)意味着,当前状态为ki,输入字符为a时,将转换 为下一个状态kj,我们把kj称作ki的一个后继状态;
1.确定的有限自动机
通常把这五要素组成的五元式M=(K,∑,f, S0,Z)称为确定的 有限自动机(DFA),它是相应的状态转化图的一种形式描 述,或者说,是状态转换矩阵的另一种表示。 在状态转换的每一步,据DFA当前所处状态及扫视的输入 字符,能唯一确定下一状态。

例:文法G=({S,U},{0,1},{SS1 |U1,

编译原理第三章_有穷自动机

编译原理第三章_有穷自动机
5
例 过河问题 分析(续)
初始状态:MWGC-φ;终止状态:φ-MWGC。 g
MWGC-φ
WC-MG
问题:
6
例 过河问题 状态转换图
起始 g
MWGC-φ g
g φ-MWGC
g
7
WC-MG
m
m MWC-G
w
w
c
C-MWG
c W-MGC
g
g
MGC-W c
MG-WC
w
m
c G-MWC
m
gg MWG-C
+dd. ddd;
输入符号串
数字 数字
SB
.
数字
+
A
H
-.
数字
.G
接收:若扫描完输入串, 且在一个终止状态上结 束。
数字 阻塞:若扫描结束但未 停止在终止状态上;或 者为能扫描完输入串 (如遇不合法符号)。
不完全描述:某些状态 对于某些输入符号不存 在转换。
练习:+34.567 .123 3.4.5
w
有穷自动机(FA)
数字系统:可以从一个状态移动到另一个状态;每次 状态转换,都上由当前状态及一组输入符号确定的;可以 输出某些离散的值集。
FA:一个状态集合;状态间的转换规则;通过读头来 扫描的一个输入符号串。
读头:从左到右扫描符号串。移动(扫描)是由状态 转换规则来决定的。
8
读头
一个FA的例子
(3)运行: 串f(,Q,且t1tt21)∈= Σf(,f(Qt1,t2t1∈), Σt2*),其中Q∈K, t1t2为输入字符
17
例3
题:试证abba可为例1的DFA M所识别(所接受)。

词法分析-编译原理-03-(二)

词法分析-编译原理-03-(二)

5. 5.1 5.2 5.3 5.4 5.5 5.6 5.7 6 6.1 6.2
isalpha(ch) : ch→buf; 下一字符→ch WHILE isalpha(ch) OR isdigit(ch) DO ch→buf; 下一字符→ch 回送 ch; key = isKeyword(buf) IF key >= 0 THEN 返回 key Lookup( buf ) → attr 返回 IDN ':' : 下一字符→ch; IF ch等于'=' THEN 返回 ASG 出错处理
第三章 词法分析 3.1 词法分析的任务
输入源程序,输出单词符号
把构成源程序的字符串转换成语义
上关联的单词符号的序列
单词符号
token
按照最小的语义单位设计, 通常表示为二元组
(单词种别,属性值)
1) 单词符号的表示
单词种别
通常按照语法分析的需要设置. 常用: 各关键字,标识符,常数,各
例3-3 状态图的实现算法
1. 2. 3.1 3. 4. 4.1 4.2 4.3 4.4 4.5 读入当前字符 ch //跳过空格 WHILE ch 是空格 DO 下一字符 → ch CASE ch OF isdigit(ch) : ch→buf; 下一字符→ch WHILE isdigit(ch) DO ch→buf; 下一字符→ch 回送 ch 将缓冲区的数字字符串变成数字→attr 返回 NUM
7 8 9 10 11 12 13 14 15 16 17 18
'+' : 返回 ADD '-' : 返回 SUB '*' : 返回 MUL '/' : 返回 DIV '=' : 返回 EQ '>' : 返回 GT '<' : 返回 LT '(' : 返回 LP ')' : 返回 RP ';' : 返回 SEMI 其它 : 出错处理 END OF CASE

编译原理 3.2正规文法和状态转换图

编译原理 3.2正规文法和状态转换图
S2,…,Sn为行,以各个输入符号a1,a2,…,am 为列,组成一个n行m列矩阵:
2020/6/18
B=
状态 vt S1 S2 … Si … Sn
a1 a2 a3 … aj … am
B23 Bij
第25页/共24页
其中,元素 Bij=B[Si,aj] 指明下一状态 Sk 和 扫描器此时应完成的语义动作;
助记符
while if else
switch case id num
+ − * relop relop relop = ;
内码值
— — — — —
id在符号表中位置
num在常数表中位置


— LE LT EQ — —
第33页/共24页
2 C语言子集对应的状态转换图的设计 首先对输入串做预处理。
即剔除多余的空格、注释、制表符和 换行符等。
由于直接使用整数编码不利于记忆, 故采用一些助记符表示种别编码。
2020/6/18
第32页/共24页
表1 C语言子集的单词符号及内码值
单词符号
while if else
switch case 标识符 常数
+ − * <= < == = ;
2020/6/18
种别编码
1 2 3 4 5 6 7 8 9 10 11 11 11 12 13
(2)状态4识别出一个常数后可以将它 转换成二进制常数再登录到常数表,然后返 回它在常数表中的入口指针作为内码值。
2020/6/18
第37页/共24页
3 状态转换图的实现 状态转换图易于用程序实现,最简单的
办法是让每个状态对应一小段程序。对于 图3–00,首先引进一组变量和过程:

chapter3.2正规文法和状态转换图

chapter3.2正规文法和状态转换图

右=>状 讨论1:消除ε产生式的方法-2
如文法G[S]:
S -> A A -> aX X -> ε 消除ε后,G[S]为 S -> A A -> a 而不是: S -> A A -> aX | a (显然A无法产生终止符串)
右=>状 讨论2 A-other->[[F]] vs [[A]]
A
[other]
L(G) c, cd, ad b | n 0
n


3.2.1(1)右线性文法=>状态转换图
设G=(VN,VT,P,S)是一右线性文法,令|VN|=K, 1) 则所要构造的状态转换图共有K+1个状态. 2) VN中的每个符号分别表示K个状态 2.1) G的开始符S为初态状态
3) 终止状态,用F(VN)标记
1
{return ( ICON= w ); {n++; w=w*10+d;} {return (FCON =w*pow(10,e*p-n) ) ;} {n++;w=w*10+d;} error {p=p*10+d;} e=-1; error {p=p*10+d;} error {p=p*10+d;} {return (FCON=w*pow(10,e*p-n) );
3) 起始状态,用R(VN)标记
R是新加(状态)节点
左线性文法=>状态转换图 转换规则 A -> Ba B R
a
a
A A
A -> a
若A为起始符(G[A])
A
消除ε,重用上述规则
A ->ε
不存在这 种转换

编译原理第3章

编译原理第3章
• 二、有限自动机(FA:Finite Automata)
1、说明:
• 有限自动机是具有离散输入输出系统的数学模型。它具 有有限数目的内部状态,系统可以根据当前所处的状态 和面临的输入字符决定系统的后继行为。其当前状态概 括了过去输入处理的信息
输入带
a b
c d
读头
e ……
有限状态控制器
2014-5-22 12
3.1 正规文法与有限自动机
• 二、有限自动机
电梯是典型的有限状态自动机 那电梯如何描述呢? 电梯的程序又如何构造呢?
2014-5-22
13
3.1 正规文法与有限自动机
• 二、有限自动机-分别讲解
2、确定有限自动机(DFA)
• 确定有限自动机DFA是一个五元组 M(S,,f,s0,Z),其中:
• 1. 取I0=S0 • 2. 若状态集Q中有状态Ii={s0,s1,……sj} , sk∈S , 0 kj;而 且M机中有f({s0,s1,……sj},a)= f(s0,a)∪f(s1,a)…∪f(sj,a) ={s0,s1,……st} =It,若It不在Q中,则将It加入Q。 • 3. 重复第(2)步,直至Q中没有新的状态加入 • 4.取终态F={I | I ∈ Q,且I ∩ Z }
例:已知正规文法G1的产生式,求出它所定义的正规式。
产生式为:SaS|aB BbB|bA AcA|c
• 解:由产生式写出对应的联立方程组: S=aS|aB ( 1) B=bB|bA ( 2) A=cA|c ( 3) 运用定理2求解(1)(2)(3): …
2014-5-22
11
3.1 正规文法与有限自动机
• 注意:
– 仅由字母表A={ai| i=1,2,……n}上的正规式所组成的语言 称作正规集,记作L() – 利用正规集相同,可用来证明相应正规式等价 – “|”读作为“或”,也可写作为“+”或“,”;“•”读作 连接

编译原理 第3章习题解答

编译原理 第3章习题解答

第三章习题参考解答3.1 构造自动机A,使得①②③当从左至右读入二进制数时,它能识别出读入的奇数;④它识别字母表{a, b}上的符号串,但符号串不能含两个相邻的a,也不含两个相邻的b;⑤它能接受字母表{0, 1}上的符号串,这些符号串由任意的1、0和随后的任意的11、00对组成。

⑥它能识别形式如±dd*⋅ d*E ±dd的实数,其中,d∈{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}。

3.2 构造下列正规表达式的DFSA:① xy*∣yx*y∣xyx;② 00∣(01)*∣11;③ 01((10∣01)*(11∣00))*01;④ a(ab*∣ba*)*b。

3.3 消除图3.24所示自动机的空移。

bεq1q2q3aba,bqaq6q4q5abεεε图3.24 含空移的自动机3.4 将图3.25所示NDFSA确定化和最小化。

xyqq1q2q4q3xyxyx,yx图3.25 待确定化的NDFSA3.5 设e、e1、e2是字母表∑上的正规表达式,试证明① e∣e=e;② {{e}}={e};③ {e}=ε∣e{e};④ {e1 e2} e1= e1{e2 e1};⑤ {e1∣e2}={{e1}{e2}}={{e1}∣{e2}}。

3.6 构造下面文法G[Z]的自动机,指明该自动机是不是确定的,并写出它相应的语言: G[Z]:Z→A0A→A0∣Z1∣03.7 设NDFSA M=({x, y},{a, b},f, x, {y}), 其中,f(x, a)={x, y}, f(x, b)={y}, f(y, a)=∅, f(y, b)={x, y}。

试对此NDFSA确定化。

3.8 设文法G[〈单词〉]:〈单词〉→〈标识符〉∣〈无符号整数〉〈标识符〉→〈字母〉∣〈标识符〉〈字母〉∣〈标识符〉〈数字〉〈无符号整数〉→〈数字〉∣〈无符号整数〉〈数字〉〈字母〉→a∣b〈数字〉→1∣2试写出相应的有限自动机和状态图。

编译原理 第3章

编译原理 第3章
编译原理 6
3.1.3 识别标识符的若干约定和策略
定义标识符的语法规则为 <标识符>→<字母>∣<标识符><字母>∣<标识符><数字> 从语法上来说,标识符的长度似乎可以任意。 然而,考虑实现技术,许多语言都对标识符的最大允许长度作 了限制。
编译原理
7
设计扫描器时,按如下原则行事: 1. 如果一个标识符中的字符个数超过最大允许长度,则把尾部 多出的字符截去; 2. 对于字符个数不超过最大允许长度的标识符,则按“尽可能 长”的策略来识别标识符。
图3.5 状态图
首先,在开始状态R下扫描的第一个符号是0,转到状态 V,表示0是句柄,归约到V。接下来,在状态V扫描1, 转到状态S,此时句柄为V1,归约成S。再往下扫描1,由 状态S转到状态U,表示句柄为S1归约为U。最后,扫描0, 转到状态S,此时句柄为U0,归约为S,
编译原理 27
图3.6(a)列出分析的每一步。形成图3.6(b)所示的语法 树。 自底向上的分析。
读入a1,沿矢线方向到下一状态,在此状态时扫 描a2,……, 直至W中全部字符读完且进入终态F,则W已被接受。
编译原理 19
例:下面的状态图对于串baabba的识别 S→aA|bB,A→bB|aD|a,B→aA|bD|b,D→aD|bD|a|b
a
A a a
a

S b
b
B
a
D b a,b b Z
编译原理
16
E d
d 0
d
d
d 5 d 6
1
.
d
2
E
4
±
. 图3.4文法G<无符号数>的状态图

编译原理第三章(4-2)

编译原理第三章(4-2)
北京交通大学 于双元 15
无符号数一般形式:dm dm-1 · · · d1 d0 ·d-1 d-2 · · ·d-nE+ dd · · · d E d 0 d . 3 d 1 d d E 4 d 5 d d 6
.
d
2
+∣d
. d d
d
d
F
北京交通大学 于双元 16
无符号数一般形式:dm dm-1 · · · d1 d0 ·d-1 d-2 · · ·d-nE+ dd · · · d E d 0 d . 3 d 1 d d E 4 d 5 d d 6
A B
②开始符号S作为初始状态 设一符号F不属于V作为终止状态
S
F B F F
③形如A→aB的规则
④形如A→a的规则 特别:A → ε
A A
a a
A 未曾在A的射出弧中 出现过的终结符号
北京交通大学 于双元
也可以消除ε产生式后再画状态图。
4
例:G[Z]: Z→0U∣1V U →1Z∣1 V →0Z∣0
1 初态
0 Z 1
U
1 0
F
0
V
②此过程是一种推导过程. (最右(左)推导)
相当于: Z=>0U =>01Z =>011V =>0110Z =>01100U =>011001
能否编程序实现?
有什么问题?
北京交通大学 于双元
8
3 、左线性文法的状态图
左线性文法的规则呈: A→Ba或A→a A,B∈Vn ,a∈Vt (1)状态图 ①G[S]的每一个非终结符号代表一结点(状态) A B
北京交通大学 于双元
23
3、设有如下状态转换图,试给出对应的正则文法 (左线性和右线性)。

32 正规文法和状态转换图

32 正规文法和状态转换图

S ⇒a1A1 ⇒a1a2A2 ⇒…… ⇒a1a2…an-1An-1 ⇒ a 1 a 2 … an
右线性文法与状态转换图
是一右线性文法 是相应的状态转换图 右线性文法,M 状态转换图,则从前面的 设G是一右线性文法 M是相应的状态转换图 则从前面的 讨论可以看出如下事实: 讨论可以看出如下事实:
(1)在利用M对符号串w进行识别时 M中每次状态的转换都模拟了 在利用M 进行识别时,M 在利用 一步直接推导,即识别方法 或称分析方法) 即识别方法(或称分析方法 一步直接推导 即识别方法 或称分析方法 是“↓”的; (2)因右线性文法只有形如A→aB、A →a的产生式,所以推导的每 因右线性文法只有形如 aB、 的产生式, 一步所得句型只含一个非终结符,所以推导的规范的,每步所 一步所得句型只含一个非终结符,所以推导的规范的 规范 得的句型也必为规范句型 规范句型; 得的句型也必为规范句型; 必存在G中的一个推导 (3)对于M所识别的任一符号串x,必存在 中的一个推导S ⇒* x 对于M 必存在 对于 (即有x∈L(G);反之 对于L(G)中任一句子y,必存在一条从初态S 反之,对于 即有 必存在一条从初态 到终态F的路径,此路径上各矢线的标记依次拼接起来所组成的符 到终态F的路径 此路径上各矢线的标记依次拼接起来所组成的符 号串恰为y
由左线性文法构造状态转换图的例子
已给文法G=({S,U},{0,1},{S→S1 |U1, U→U0 | 0},S) 已给文法
U→0 U →U0 S →U1 S →S1 0 1 1
用左线性文法构造出的状态转 换图来识别文法的句子,其过 换图来识别文法的句子, 程与前面右线性文法构造的状 态转换图用法一样,这里不再 态转换图用法一样, 赘述. 赘述.

编译原理 3.3有限自动机

编译原理 3.3有限自动机
且定义 f( {Sk1,Sk2,…,Skm},w)= U f(Ski,w) i 1
则有 f(S,aw)= f( f (S,a),w )
m
=
U
i 1
f(Ski,w)
2020/6/18
第13页/共42页
讨论问题3:
NFA M所能识别的语言:对于Σ*中的符号串x,
若集合 f(S0,x)中含有属于终态集Z中的状态 (即 至少存在一条从S0到某一终态的通路,把此通路中所 有矢线上的标记连接起来就是符号串x),我们就说x 为M所接受,所有这样的x所组成的集合称为NFA M 的接受集,记作 L(M)。
f’(q0,a) =q0 f’(q0,b) =q1
{q0, q1 , q2}
第二步
2020/6/18
{q0, q1 , q2}
对于c,T=f(q0,c)= f({S0, S1, S2,S3},ca) ,
ε_closure(T) = ε_closure({S2})= {S2,
S3} = q2
S0 ε
f’(bq0,c) =q2
且{R1,R2,…,Rj}∩Z≠Ø}
2020/6/18
第21页/共42页
例:NFA M =({S0,S1},{a,b},f,S0,{S1} )
a
b
a,b
S0
S1
b
a
b
S0 {S0,S1} {S1}
S1
Ø
{S0,S1}
DFA M ′ =(K′,{a,b},,f ′, S0 ′, Z′)
2020/6/18
第9页/共42页
正规文法 L(G)
必定存在 反之亦然
DFA M
=
L(M)
2020/6/18

蒋立源编译原理 第三版 第三章 习题与答案(修改后)

蒋立源编译原理 第三版 第三章 习题与答案(修改后)

第3章习题3-1 试构造一右线性文法,使得它与如下的文法等价S→AB A→UT U→aU|a D→bT|b B→cB|c 并根据所得的右线性文法,构造出相应的状态转换图。

3-2 对于如题图3-2所示的状态转换图(1) 写出相应的右线性文法;(2) 指出它接受的最短输入串;(3) 任意列出它接受的另外4个输入串;(4) 任意列出它拒绝接受的4个输入串。

3-3 对于如下的状态转换矩阵:(1) 分别画出相应的状态转换图;(2) 写出相应的3型文法;(3) 用自然语言描述它们所识别的输入串的特征。

3-4 将如下的NFA确定化和最小化:3-5 将如题图3-5所示的具有ε动作的NFA确定化。

题图3-5 具有ε动作的NFA3-6 设有文法G[S]:S→aA A→aA|bB B→bB|cC|c C→cC|c 试用正规式描述它所产生的语言。

3-7 分别构造与如下正规式相应的NFA。

(1) ((0* |1)(1* 0))*(2) b|a(aa*b)*b3-8 构造与正规式(a|b)*(aa|bb)(a|b)*相应的DFA。

第3章习题答案3-1 解:根据文法知其产生的语言是:L[G]={a m b n c i| m,n,i≧1}可以构造与原文法等价的右线性文法:S→aA A→aA|bB B→bB|cC|c C→cC|c 其状态转换图如下:3-2 解:(1) 其对应的右线性文法是G[A]:A →0D B→0A|1C C→0A|1F|1D→0B|1C E→0B|1C F→1A|0E|0(2) 最短输入串为011(3) 任意接受的四个输入串为:0110,0011,000011,00110(4) 任意拒绝接受的输入串为:0111,1011,1100,10013-3 解:(1) 相应的状态转换图为:(2) 相应的3型文法为:(ⅰ) S→aA|bS A→aA|bB|b B→aB|bB|a|b(ⅱ) S→aA|bB|a A→bA|aC|a|b B→aB|bC|b C→aC|bC|a|b(ⅲ) S→aA|bB|b A→aB|bA|a B→aB|bB|a|b(ⅳ) S→bS|aA A→aC|bB|a B→aB|bC|b C→aC|bC|a|b(3) 用自然语言描述的输入串的特征为:(ⅰ) 以任意个(包括0个)b开头,中间有任意个(大于1)a,跟一个b,还可以有一个由a,b组成的任意字符串。

第3章编译原理答案(主编张晶)

第3章编译原理答案(主编张晶)

others *
1/
2*
3* 4/ others
5
others others
all
6 all
others *
1/
2*
3* 4/ others
5
状态1:注释开始状态。 状态2:进入注释体前的中间状态。 状态3:表明目前正在注释体中的状态。 状态4:离开注释前的中间状态。 状态5:注释结束状态,即接受状态。
(1)分析和识别单词及属性, 包括识别语言的关键字、标识符、常数、运算符等;
(2)跳过各种分隔符,如空格,回车,制表符等; (3)删除注释; (4)进行词法检查,报告所发现的错误; (5)建立符号表。
main( )/*ADD*/ {int x=10,y=20,sum; sum=x+y; }
词法分析
正则表达式也是描述单词的重要工具。
【例2】设Σ={a,b}
正规式 ba* a(a|b)* (a|b)*abb (a|b)*(aa|bb) (a|b)* (aa|ab|ba|bb) * (a|b)(a|b)(a|b) *
正规集 所有以b为首后跟任意多个a的符号串 所有以a为首的符号串 所有以abb为尾的a,b符号串 所有含有两个相继的a或相继的b的符号串 空串和任何长度为偶数的符号串 任何长度大于等于2的符号串
转换
正规文法
main、(、)、{、int、 x、=、10、,、y、=、 20、,、sum、;、sum、 =、x、+、y、;、}
词法分析程序的设计与实现?
词法规则
状态图
词法分析程序
为识别单词而专门设计的有向图, 是设计词法分析程序的一种好途径。
(1)根据词法规则写出正规文法; (2)将正规文法转换成状态图; (3)将状态图转换成流程图。

编译原理第二版第3章词法分析

编译原理第二版第3章词法分析
一、正规式与正规集的递归定义
1. ε和φ都是∑上的正规式,它所表示的正规集分
别为{ε}和Ф; 2. 任何a∈∑,a是∑上的正规式,它所表示的正 规集为{a}; 3. 假定e1和e2都是∑上的正规式,他们所表示的 正规集分别为L(e1)和L(e2),那么,以下也 都是正规式和他们所表示的正规集;
一、正规式与正规集的递归定义
3.2 单词符号及输出单词的形式
单词自身值
对常数,基本字,运算符,界符就是他们本 身的值 对标识符,将标识符的名字登记在符号表中, ‚自身值‛是指向该标识符所在符号表中位 置的指针。
假定基本字、运算符和界符都是一符一种 例:if(a>1) b=100; 词法分析后输出的单词序列是: (2, ) if (29, ) ( (10,‘a’) a (23, ) > (11,‘1’) 1 (30, ) ) (10,’b’) b (17, ) = (11,‘100’) 100 (26, ) ;
4. 仅由有限次使用上述三步定义的表达式才是∑上的 正规式,仅由这些正规式所表示的字集才是∑上 的正规集。
重点回顾
四、将正规文法转换成正规式 求非终结符的正规式 将正规文法中的每个非终结符表示成关 于它的一个正规式方程,获得一个联立 方程组 用代入法解正规式方程组 最后只剩下一个开始符号定义的正规式, 其中不含非终结符
3.3 语言单词符号的两种定义方式
作用: 描述单词的构成规则,基于这类描 述工具建立词法分析技术,进而实现词法 分析程序的自动构造。 工具有: 正规文法 正规式(Regular Expression)
多数程序设计语言的单词符号都能用正 规文法或正规式来定义。
3.3.1 正规文法
多数程序设计语言单词的语法都能用正 规文法(3型文法)描述 正规文法回顾 文法的任一产生式α →β 的形式都为 A→aB或A→a,其中A ,B∈VN ,a∈VT A→Ba或A→a,其中A ,B∈VN ,a∈ VT 正规文法描述的是VT*上的正规集

32 正规文法和状态转换图

32 正规文法和状态转换图

由右线性文法构造状态转换图
设G=(VN,VT,P,S)是一右线性文法,并设|VN|=K,则所要构造的状态 转换图共有K+1个状态(结点).用VN中的每个符号分别标记其中的 K个结点,且令G的开始符S为初态结点;余下的一个结点作为终态 结点,用F(∉VN)标记.我们用如下规则来连接这K+1个结点: ∉ (1)对于G中产生式A→aB,从结点A引一有向边到结点B,并用a标记这 → 一有向边; (2)对于G中产生式A→a,从结点A引一有向边到终态结点F,并用a标记 → 这一有向边; (3)对于G中产生式A→ε →ε(若有的话),则将结点A设为终态. →ε 例如,P48中定义的无符号数的文法对应的~为(化简后):
1
{ r e tu rn ( IC O N = w ) ; { n + + ; w = w * 1 0 + d ;} { r e tu rn ( F C O N = w * p o w ( 1 0 ,e * p -n ) ) ;} { n + + ;w = w * 1 0 + d ;} e rro r { p = p * 1 0 + d ;} e = -1 ; e rro r { p = p * 1 0 + d ;} e rro r { p = p * 1 0 + d ;} { r e tu rn ( F C O N = w * p o w ( 1 0 ,e * p -n ) ) ;
d d d d E E d d d
0
.
d
1
2
3
4
+|-
5
6
利用状态转换图识别符号串的方法
利用~对 对于已给的字符串w=a1a2…an,ai∈VT,利用 对w 识别的 利用 步骤如下: 步骤如下 (1)从初始状态S出发,自左至右逐个扫描w的各个字符 从初始状态 出发 自左至右逐个扫描 (当前为a1),此时在结点S所射出的诸矢线中 寻找标记 当前为 此时在结点 所射出的诸矢线中,寻找标记 的矢线(若不存在 若不存在,则表明 有语法错误),读入 为a1的矢线 若不存在 则表明w有语法错误 读入a1并 沿矢线所指方向前进,过渡到下一状态 过渡到下一状态(设为 沿矢线所指方向前进 过渡到下一状态 设为A1). (2)设当前处在Ai状态 所扫描的字符为ai+1,在结点Ai所射 设当前处在 状态,所扫描的字符为 在结点 出的诸矢线中,寻找标记为 的矢线(若不存在 若不存在,则表明 出的诸矢线中 寻找标记为ai+1的矢线 若不存在 则表明 w有语法错误 读入ai+1,并进入状态Ai+1; 有语法错误),读入 并进入状态 (3)重复 重复(2),直到w中所有字符被读完且恰好进入终态F 重复 直到 宣告整个识别结束, 时,宣告整个识别结束 w可被接受 宣告整个识别结束 可被接受. 显然,若我们从初态出发 分别沿一切可能 路径到达 若我们从初态出发,分别沿一切可能的 到达终态 显然 若我们从初态出发 分别沿一切可能的路径到达终态 并将中径中矢线上所标记的字符依次连接起来,便 结点,并将中径中矢线上所标记的字符依次连接起来 结点 并将中径中矢线上所标记的字符依次连接起来 便 得到状态转换图所能识别的全部符号串 状态转换图所能识别的全部符号串,这些符号串组 得到状态转换图所能识别的全部符号串 这些符号串组 成的集合构成了该~识别的语言 成的集合构成了该 识别的语言

第3章-2-状态转换图

第3章-2-状态转换图


例2:
字母
字母或数字
0
1
其它

*
PROCEDURE Pro0; BEGIN Getchar; IF char IN [‘A’..‘Z’ ] then pro1 else error; END; Procedure pro1; begin getchar; while char IN [‘A’..‘Z’, ‘o’..‘g’ ] DO begin concat; getchar; End; pro2; End; procedure pro2; begin retract; return(101,TOKEN ); end;
识别无符号数的状态矩阵
当前状 态 0 扫描字符 d . ther d . E other d E other d other d + other d other d other 语义处理操作或接受动作 {w=0;n=0;p=0;e=1;w=w*10+d} {w=0;n=0;p=0;e=1;} error {w=w*10+d;} {return ( ICON= w ); {n++; w=w*10+d;} {return (FCON =w*pow(10,e*p-n) ) ;} {n++;w=w*10+d;} error {p=p*10+d;} e=-1; error {p=p*10+d;} error {p=p*10+d;} {return (FCON=w*pow(10,e*p-n) ); 后继状 态 1 3 1 2 4 end 2 4 end 2 6 5 5 6 6 end
步骤 1 2 3 4 5 6
当前状态 余留的符号串 R U U U S S 00011 0011 011 11 1 (识别结束)

编译原理_南京邮电大学中国大学mooc课后章节答案期末考试题库2023年

编译原理_南京邮电大学中国大学mooc课后章节答案期末考试题库2023年

编译原理_南京邮电大学中国大学mooc课后章节答案期末考试题库2023年1.左线性文法画状态转换图时,文法的开始符号对应的终止状态答案:正确2.e1= (a|b)*,e2=(a*b*)* e1和e2等价答案:正确3.一张状态转换图只包含有限个状态,其中有一个被认为是初态,最多只有一个终态。

答案:错误4.简单优先分析法是一种规范归约分析法答案:正确5.S∷=aAa | aBb| bAb| bBa A∷=x B∷=x 该文法不是LALR(1)文法答案:正确6.LL(1)文法无左递归、无二义性。

答案:正确7.文法:E∷=EE+ | EE* | aFOLLOW(E)={+,*,#}答案:错误8.LR分析栈中存放的状态是识别文法规范句型()的DFA的状态。

答案:活前缀9.已知文法A∷=BCc | gDBB∷=ε| bCDEC∷=DaB | caD∷=ε| dD E∷=gAf |cFOLLOW(B)={}答案:{ a,c,d,g,f,#}10.表达式(a+b)/(a-b)-(b*c)的四元式序列为:⑴.(+,a,b,T1)⑵.(-,a,b,T2)⑶.(/,T1,T2,T3)⑷.(*,b,c,T4)⑸.(-,T3,T4,T5)答案:正确11.编译程序与具体的机器有关。

答案:正确12.由文法的开始符经0步或多步推导产生文法符号序列是句子。

答案:错误13.如果在进行归约时,文法的某些规范句型的句柄不唯一,则称该文法是二义性文法。

答案:正确14.规范归约又称为最右归约。

答案:错误15.假设有一文法,如果文法G中没有形如A::=....BC....这样的规则,其中A、B和C都为非终结符号,则称该文法为()答案:算符文法16.递归下降分析法属于()分析方法答案:自顶向下17.由正规文法构造状态转换图,其右线性文法识别符号对应是状态转换图的初始状态。

答案:正确18.算符优先分析法是一种一种规范归约分析法答案:错误19.确定的有穷自动机只有唯一的终止状态答案:错误20.正规表达式(a|b)*和(a*b*)*不等价答案:错误21.含有优化部分的编译程序的执行效率高答案:错误22.FORTRAN语言是一种系统程序设计语言,可用来编写编译程序。

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

2020/6/18
第30页/共24页
一个简单的词法分析器示例
1 C语言子集的单词符号表示 2 C语言子集对应的状态转换图的设计 3 状态转换图的实现
2020/6/18
第31页/共24页
1 C语言子集的单词符号表示
大多数程序语言的单词符号都可用 状态转换图予以识别。下面构造一个C 语言子集的简单词法分析器,该C语言 子集的所有单词符号及其种别编码和内 码值如下表所示。
开始符号S作为初始状态; S 设一符号F不属于V作为终止状态; F
2020/6/18
第7页/共24页
形如A→aB的规则:从结点A引一条矢线到结
点B,并用符号a标记这条矢线;
a
A
B
形如A→a的规则:从结点A引一条矢线到终态
结点F,并用符号a标记这条矢线;
a
A
F
2020/6/18
第8页/共24页
则有:S=> a1A1=> a1 a2A2=> a1 a2 a3A3=> … => a1 a2 a3 … an-1An-1=> a1a2a3…an
事实上,在利用状态转换图M对符号串ω进行识别的 过程中,M中的每一次状态转换都模拟了G中的一步 直接推导,所以,上述方法是一个自顶向下的分析
方法。
2020/6/18
a
R
A
2020/6/18
第16页/共24页
例如:G[Z]:Z→U0∣V1 U →Z1∣1 V →Z0∣0
1
2020/6/18
1
U
初态 R
0
V
0
Z
1
0
第17页/共24页
二、状态图的使用——识别句子
对于已知的字符串ω =a1a2a3……an,利用状态 转换图识别的步骤:
从初态R开始,自左向右扫描ω的字符,在当前状态 所射出的弧中,找出标记有该字符的弧,并沿此弧 过渡到下一当前状态;
(8)buildlist( ): 将标识符登录到符号表或将常数 登录到常数表;若登录表中已存在该标识符 或常数,则返回相关信息。
(9)error( ): 进行出错处理。 (10)getchar():把下一个输入字符读到character 中,读入源程序字符的指针前移一个字符。
2020/6/18
第40页/共24页
Sk:其含义是,在Si状态下,扫描到输入符
号aj时,按序偶(Si,aj)查矩阵B,扫描
Bij=
器根据Bij的指示,先执行相应的语义动作,
再转换到下个状态Sk;
空白:“出错”,则说明输入符号串有误,
拒绝接受,扫描器将调用出错处理程序进
行处理。
2020/6/18
第26页/共24页
在一个状态矩阵中,有很多元素都是出错状态, 为了节省存放状态矩阵的存储空间,在具体实现 时,常采用更为紧凑和有效的数据结构(见P55 表3-1 )。
一、状态图
文法中的每一个非终结符号代表一结点 (状态) ;
开始符号S作为终止状态 S 设一符号R不属于V作为初始状态 R
2020/6/18
第15页/共24页
形如A→Ba的规则:从结点B引一条矢线到 结点A,并用符号a标记这条矢线;
a
B
A
形如A→a的规则:从初始状态R引一条矢 线到结点A,并用符号a标记这条矢线;
助记符
while if else
switch case id num
+ − * relop relop relop = ;
内码值
— — — — —
id在符号表中位置
num在常数表中位置


— LE LT EQ — —
第33页/共24页
2 C语言子集对应的状态转换图的设计 首先对输入串做预处理。
即剔除多余的空格、注释、制表符和 换行符等。
其它
其它
第23页/共24页
3.2.3 状态转换图的一种实现
状态矩阵法:状态转换图可方便地用于识别 单词,但是,如何让计算机利用状态转换图 来进行词法分析呢?一个简单实用的方法就 是将图以矩阵的形式保存在内存中,这就是 所谓的状态矩阵法。
2020/6/18
第24页/共24页
状态(转换)矩阵:以状态转换图中各个状态S1,
字母
其它
*
0
1
2
2020/6/18
( a)
第21页/共24页
识别无符号整数的状态转换图如下:
数字
数字 0
其它
*
1
2
(b)
2020/6/18
第22页/共24页
识别无符号数的状态转换图如下:
E
数字
数字
数字
数字 · 数字 E +或- 数字 其它
0
1
2
3
4
5
6
27
数字
另见:P51 图 3-3
2020/6/18
(5)letter( )和digit( ): 判断character中的 字
符是否为字母和数字的布尔函数,若是 则返回true, 否则返回false。 (6)reserve( ): 按token数组中的字符串查 保留字表, 若是保留字则返回其编码, 否则返回0。
2020/6/18
第39页/共24页
(7) retract( ): 扫描指针回退一个字符, 同 时将character置为空白。
第13页/共24页
从状态转换图的初态出发,分别沿着一切可能 的路径到达终态结点,并将每条路径各矢线上 的标记字符依次连接起来,便得到状态转换图 所能识别的全部符号串,这些符号串所组成的 集合也就是该状态转换图所识别的语言。
2020/6/18
第14页/共24页
3.2.2.2 左线性文法的状态转换图
其次把保留字作为一类特殊标识符处理。
即对保留字不专设对应的状态转换图, 当状态转换图识别出一个标识符时就去查 表,确定它是否为一个保留字。
2020/6/18
第34页/共24页
对保留字专设对应的状态转换图:
C语言子集对应的状态转换图如下:
2020/6/18
第35页/共24页
空白 字母或数字
开始 字母
<标识符>→<标识符>数字 <标识符>→字母
凡是能用正规文法描述的语言,均可由某种有 限状态算法进行分析;
2020/6/18
第3页/共24页
3.2.1 状态转换图
状态转换图是设计和实现扫描器的一种有效工具; 状态转换图:是一组矢线连接的有限个结点组成
的方向图
每一个结点对应在识别或分析状态中扫描器所处的状 态,用小圆圈表示;
特别的A → ε:从A引一条矢线到终态,且在这 条失线上标记未曾在A的射出弧中出现终结符号。
例如:
Vt ={a,b,c} A→aB|ε
a
B
A
b,c F
表示读到a以外的其他任何终结符号都进入终态
2020/6/18
第9页/共24页
例如:G[Z]:Z→0U∣1V U →1Z∣1 V →0Z∣0
2020/6/18
满足:识别到字符串最后一个字符,进入终态; 否则:ω不是文法的句子(单词符号);
2020/6/18
第18页/共24页
例如:
G[Z]: Z→U0∣V1 U →Z1∣1 V →Z0∣0
1U 初态 R
0V
2020/6/18
1 0
Z
1
0
ω =100110?
100110 U00110 Z0110 V110 Z10 U0 Z
构造出状态矩阵之后,整个单词的识别过程就可 在一个驱动程序(见P54 程序3-2)的控制之下自 动地进行,直到从输入字符串中识别出全部单词 为止;
2020/6/18
第27页/共24页
P55 表3-1
2020/6/18
第28页/共24页
P54 程序 3-2
2020/6/18
第29页/共24页
P54 程序 3-2
(2)状态4识别出一个常数后可以将它 转换成二进制常数再登录到常数表,然后返 回它在常数表中的入口指针作为内码值。
2020/6/18
第37页/共24页
3 状态转换图的实现 状态转换图易于用程序实现,最简单的
办法是让每个状态对应一小段程序。对于 图3–00,首先引进一组变量和过程:
(1)character: 字符变量,存放最新读入 的源程序字符。
(2)token: 字符数组,存放构成单词符号 的字符串。
(3)getbe( ): 若character中字符为空,则 调用getchar( ),直至character为非空。
2020/6/18
第38页/共24页
(4)concatenation( ): 将token中字符串与 character中字符连接作为token中的新 字符串。
返回(relop, LE) 返回(relop, LT)
返回(relop, EQ) 返回(=, -) 返回(; , -)
图 3-00
非法字符错
第36页/共24页
注意: (1)状态2识别出一个单词符号后需先
查保留字表,若匹配则为保留字,否则为标 识符。若为标识符,还需查符号表,看表中 是否有此标识符。若符号表中无此标识符, 则先将它登录到符号表中,再返回它在符号 表中入口地址作为内码值;若表中有此标识 符,则直接返回其入口地址作为内码值。
Z U0 Z1 V1 Z0 U0
1
此过程是一种归约过程
第19页/共24页
用对左线性文法所构造的状态转换图来识别 文法的句子,其过程与上面对右线性文法中 所述的过程并无二致。不过,就识别的方法 而论,它却属于自底向上的分析。
相关文档
最新文档