版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章词法分析
哈尔滨工业大学陈鄞3.1单词的描述3.2
单词的识别3.3词法分析阶段的错误处理3.4词法分析器生成工具Lex
提纲3.1单词的描述语言L={a}{a,b}*({ε}∪({.,_}{a,b}{a,b}*))
正则表达式(RegularExpression,RE)是一种用来描述正则语言的更紧凑的表示方法例:r=a(a|b)*(ε|(.|_)(a|b)(a|b)*)正则表达式可以由较小的正则表达式按照特定规则递归地构建。每个正则表达式r定义(表示)一个语言,记为L(r)。这个语言也是根据r
的子表达式所表示的语言递归定义的假设r和s都是RE,表示的语言分别是L(r)和L(s),则
r|s是一个RE,L(r|s)=L(r)∪L(s)
rs
是一个RE,L(rs)=L(r)L(s)
r*
是一个RE,L(r*)=(L(r))*
(r)是一个RE,L((r))=L(r)
ε是一个RE,L(ε)={ε}
如果a∈∑,则a是一个RE,L(a)={a}正则表达式的定义运算的优先级:*、连接、|令∑={a,b},则L(a|b)=L(a)∪L(b)={a}∪{b}={a,b}L((a|b)(a|b))=L(a|b)L(a|b)={a,b}{a,b}={aa,ab,ba,bb}L(a*)=(L(a))*={a}*={ε,a,aa,aaa,...}L((a|b)*)=(L(a|b))*
={a,b}*={ε,a,b,aa,ab,ba,bb,aaa,...}L(a|a*b)={a,b,ab,aab,aaab,...}例十进制整数的RE(1|...|9)(0|...|9)*|0八进制整数的RE0(1|2|3|4|5|6|7)(0|1|2|3|4|5|6|7)*十六进制整数的RE0x(1|...|9|a|...|f|A|…|F)(0|...|9|a|...|f|A|…|F)*例:C语言无符号整数的RE可以用RE定义的语言叫做正则语言(regularlanguage)或正则集合(regularset)正则语言RE的代数定律定律描述r|s
=s|r|是可以交换的r|(
s|t
)=(r|
s)|
t|是可结合的r(st
)=(rs)t连接是可结合的r(s|t
)=rs|rt;
(s|t
)r=s
r|tr连接对|是可分配的εr=rε
=rε是连接的单位元r*=(
r|
ε
)*
闭包中一定包含εr**=r*
*具有幂等性对任何正则文法G,存在定义同一语言的正则表达式r对任何正则表达式r,存在生成同一语言的正则文法G
正则文法与正则表达式等价
正则定义是具有如下形式的定义序列: d1→r1 d2→r2 … dn→rn
其中:每个di都是一个新符号,它们都不在字母表Σ中,而且各不相同每个ri是字母表Σ∪{d1,d2
,…,di-1}上的正则表达式给一些RE命名,并在之后的RE中像使用字母表中的符号一样使用这些名字正则定义(RegularDefinition)C语言中标识符的正则定义digit→0|1|2|…|9letter_→
A|B|…|Z|a|b|…|z|_id→letter_(letter_|digit)*例1(整型或浮点型)无符号数的正则定义digit→0|1|2|…|9digits→digitdigit*optionalFraction→.digits|εoptionalExponent→(E(+|-|ε)digits)|εnumber→digits
optionalFraction
optionalExponent2 2.15 2.15E+3 2.15E-3 2.15E3 2E-3例23.1单词的描述3.2单词的识别3.3词法分析阶段的错误处理3.4词法分析器生成工具Lex
提纲3.2单词的识别有穷自动机(FiniteAutomata)有穷自动机的分类从正则表达式到有穷自动机有穷自动机(FiniteAutomata,FA)由两位神经物理学家MeCuloch和Pitts于1948年首先提出,是对一类处理系统建立的数学模型这类系统具有一系列离散的输入输出信息和有穷数目的内部状态(状态:概括了对过去输入信息处理的状况)系统只需要根据当前所处的状态和当前面临的输入信息就可以决定系统的后继行为。每当系统处理了当前的输入后,系统的内部状态也将发生改变3.2.1有穷自动机电梯控制装置输入:顾客的乘梯需求(所要到达的层号)状态:电梯所处的层数+运动方向电梯控制装置并不需要记住先前全部的服务要求,只需要知道电梯当前所处的状态以及还没有满足的所有服务请求FA的典型例子
输入带(inputtape):用来存放输入符号串
读头(head):从左向右逐个读取输入符号,不能修改(只读)、
不能往返移动
有穷控制器(finitecontrol):具有有穷个状态数,根据当前的
状态和当前输入符号控制转入下一状态有穷控制器读头输入带FA模型
转换图
(TransitionGraph)
结点:FA的状态初始状态(开始状态):只有一个,由start箭头指向终止状态(接收状态):可以有多个,用双圈表示带标记的有向边:如果对于输入a,存在一个从状态p到状态q的的转换,就在p、q之间画一条有向边,并标记上a03startab12abbFA的表示给定输入串x,如果存在一个对应于串x的从初始状态到某个终止状态的转换序列,则称串x被该FA接收由一个FA接收的所有串构成的集合称为是该FA定义(或接收)的语言,记为L(M)L(M)=所有以abb结尾的字母表{a,b}上的串的集合03startab12abbabbaabbFA定义(接收)的语言当输入串的多个前缀与一个或多个模式匹配时,总是选择最长的前缀进行匹配在到达某个终态之后,只要输入带上还有符号,DFA就继续前进,以便寻找尽可能长的匹配0<1=2+4start+3最长子串匹配原则(Longest
StringMatching
Principle)确定的FA(Deterministicfiniteautomata,DFA)非确定的FA(Nondeterministicfiniteautomata,NFA)3.2.2
FA的分类确定的有穷自动机(DFA)M=(S,Σ,δ,s0,F)S:有穷状态集Σ:输入字母表,即输入符号集合。假设ε不是Σ中的元素δ:将S×Σ映射到S的转换函数。
s∈S,
a∈Σ,
δ(s,a)表示从状态s出发,沿着标记为a的边所能到达的状态。s0:开始状态(或初始状态),s0∈SF:接收状态(或终止状态)集合,F⊆SM=(S,Σ,δ,s0,F)03startb12abbbaaa例:一个DFAab010112213310转换表状态输入●可以用转换表表示DFA非确定的有穷自动机(NFA)M=(S,Σ,δ,s0,F)S:有穷状态集Σ:输入符号集合,即输入字母表。假设ε
不是Σ中的元素δ:将S×Σ映射到2S的转换函数。
s∈S,
a∈Σ,
δ(s,a)表示从状态s出发,沿着标记为a的边所能到达的状态集合s0:开始状态(或初始状态),s0∈SF:接收状态(或终止状态)集合,F⊆SM=(S,Σ,δ,s0,F)03startab12abb例:一个NFA转换表ab0{0,1}{0}1Ø{2}2Ø{3}3ØØ状态输入●如果转换函数没有给出对应于某个状态-输入对的信息,就把Ø放入相应的表项中DFA和NFA可以识别相同的语言NFADFA03startab12abb03startb12abbbaaaDFA和NFA的等价性状态1:串以a结尾状态2:串以ab结尾状态3:串以abb结尾r=(a|b)*abb正则文法⇔
正则表达式⇔FA带有“ε-边”的NFAA0εBεC1start2r=0*1*2*M=(S,Σ,δ,s0,F)S:有穷状态集Σ:输入符号集合,即输入字母表。假设ε
不是Σ中的元素δ:将S×(Σ∪{ε})映射到2S的转换函数。
s∈S,
a∈Σ∪{ε},
δ(s,a)表示从状态s出发,沿着标记为a的边所能到达的状态集合s0:开始状态(或初始状态),s0∈SF:接收状态(或终止状态)集合,F⊆S例带有和不带有“ε-边”的NFA的等价性A0εBεC1start2带“ε-边”不带“ε-边”A00,1B1,2C1start20,1,2r=0*1*2*状态A:0*状态B:0*1*状态C:0*1*2*输入:以文件结束符eof结尾的字符串x。DFAD
的开始状态s0,接收状态集F,转换函数move。输出:如果D接收x,则回答“yes”,否则回答“no”。方法:将下述算法应用于输入串x。DFA的算法实现s=
s0;c=nextChar();while(c!=eof
){s=move(s,c);c=nextChar
();}if(s在F中)return“yes”;else
return
“no”;函数nextChar()返回输入串x的下一个符号函数move(s,c)表示从状态s出发,沿着标记为c的边所能到达的状态3.2.3从正则表达式到有穷自动机REDFAr=(a|b)*abbNFA
ε对应的NFA字母表Σ中符号a对应的NFAq0εqfstartq0aqfstart根据RE构造NFAr=r1r2对应的NFAr=r1|r2对应的NFAr=(r1)*对应的NFAq0r1startqfr2q1q0startqfr1r2r1q0start(a|b)*abbstartstartabb(a|b)*startabb
a|bstartabb
ab例:r=(a|b)*abb对应的NFA从NFA到DFA的转换例1NFA:bcaA,BbB,CcC,DaADFA:startAaaBbCbcDcstart转换表abcA{A,B}ØØBØ{B,C}ØCØØ{C,D}状态输入例2:从带有ε-边的NFA到DFA的转换A0εBεC1start2NFA:转换表012A{A,B,C}{B,C}{C}BØ{B,C}{C}CØØ{C}状态输入δ(s,a)表示从状态s出发,沿着标记为a的边所能到达的状态集合δ(A,0)=δ(A,0ε)=δ(A,0εε)={A,B,C}δ(A,1)=δ(A,ε1)=δ(A,ε1ε)={B,C}δ(A,2)=δ(A,εε2)=
{C}δ(B,1)=δ(B,1ε)={B,C}δ(B,2)=δ(B,
ε2)={C}δ(C,2)=
{C}例2:从带有ε-边的NFA到DFA的转换A0εBεC1start2NFA:转换表012A{A,B,C}{B,C}{C}BØ{B,C}{C}CØØ{C}状态输入1202C1BCABCDFA:start2输入:NFAN输出:接收同样语言的DFAD方法:一开始,ε-closure(s0)是Dstates中的唯一状态,且它未加标记;
while(在Dstates中有一个未标记状态T){给T加上标记;
for(每个输入符号a){
U=ε-closure(move(T,a));if
(U不在Dstates中)
将U加入到Dstates中,且不加标记;
Dtran[T,a]=U;}
}操作描述ε-closure(s)能够从NFA的状态s开始只通过ε转换到达的NFA状态集合ε-closure(T)能够从T中的某个NFA状态s开始只通过ε转换到达的NFA状态集合,即Us∈Tε-closure(s)move(T,a)能够从T中的某个状态s出发通过标号为a的转换到达的NFA状态的集合子集构造法(subsetconstruction)NFAN=(S,Σ,δ,s0,F)DFAD=(S’,Σ,δ’,s0’,F’)将T的所有状态压入stack中;将ε-closure(T)初始化为T;
while(stack非空){将栈顶元素t给弹出栈中;
for(每个满足如下条件的u:从t出发有一个标号为ε的转换到达状态u)
if
(u不在ε-closure(T)中){将u加入到ε-closure(T)中;
将u压入栈中;}}
计算ε-closure(T)识别标识符的DFAdigit→0|1|2|…|9letter_→
A|B|…|Z|a|b|…|z|_id→letter_(letter_|digit)*letter_letter_startdigit213.2.4识别单词的DFAdigit→0|1|2|…|9digits→digitdigit*optionalFraction→.digits|εoptionalExponent→(E(+|-|ε)digits)|εnumber→digits
optionalFraction
optionalExponent0d1ddε3.2d+4Eε-5d6dεNFA:start识别无符号数的DFAdd+-5d6d36d45E0d136DFA:start.2Ed0d1ddε3.2d+4Eε-5d6dεNFA:start识别无符号数的DFA识别各进制无符号整数的DFA01-90-90DEC→(1|...|9)(0|...|9)*|0start123001-70-7OCT→0(1|2|3|4|5|6|7)(0|1|2|3|4|5|6|7)*start46
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学习《员工违反规章制度处理办法》心得体会
- 学生行为规范养成方案
- 学生考试成绩异常处理管理办法
- 物业设备安装监理实施细则
- 物业小区绿化肥料农药管理制度
- 物业保洁作业规范
- 机关事业单位环境卫生管理制度
- 中药饮片烫制工艺技术手册
- 《短剧项目复盘总结手册》
- 《航班延误物资调配保障手册》
- 2026年度成都市公开选调公务员笔试备考试题及答案详解
- 2026年临床检验科尿常规检测技术考核模拟试题及答案解析
- 2026-2030中国高油酸花生油市场供需趋势与营销推广渠道分析报告
- 汽车零部件清洁生产办法
- 电梯工程质量监理评估报告模板
- 《具身智能技术及产业实践的阶段性进展 》
- 2026年人教版初中七年级语文上册文言文古今异义卷含答案
- 2025年杭州市西湖区社区工作人员(网格员)考试题库真题及答案
- 审计人员轮岗制度
- 2026新高考政策全景解读与志愿填报策略
- 安全生产举报培训
评论
0/150
提交评论