第三章词法分析.ppt
《第三章词法分析.ppt》由会员分享,可在线阅读,更多相关《第三章词法分析.ppt(128页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、上机上机词法分析词法分析已知待分析的语言子集的词法:已知待分析的语言子集的词法:.关键字:关键字:main if else int while char 均均为小写。为小写。.专用符号:专用符号:=+-*/=!=;,()3、其他标记、其他标记ID和和NUM通过以下正通过以下正则式定义:则式定义:ID:letter(letter|digit)*NUM:digitdigit*lettera|b|c|d|z|A|B|C|Zdigit 0|1|2|3|4|5|6|7|8|94 4、空格由空白、制表符、换行、空格由空白、制表符、换行符组成,用来分隔符组成,用来分隔IDID、NUMNUM、专专用符号与关键
2、字,词法分析阶段用符号与关键字,词法分析阶段常被忽略。常被忽略。各种单词符号对应的种别码如下各种单词符号对应的种别码如下表:表:单词符单词符号号种别码种别码 单词符单词符号号种别码种别码 单词符单词符号号种别码种别码main1+22;31 int2-2332 char3*24=34else5(26=35while6)27=36ID1028!=37NUM2029=21,30实验目的、要求实现的功能实验目的、要求实现的功能输入:源程序文件输入:源程序文件输出:二元组(输出:二元组(syn,token或或sum)构成的序列构成的序列(文件),其中:(文件),其中:syn为单词种别码,为单词种别码,t
3、oken为存放的单词自身字符串,为存放的单词自身字符串,sum为整型常量。为整型常量。实验目的实验目的:设计、编制并调试一个词法分析程设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。序,加深对词法分析原理的理解。上机上机2 2 语法分析语法分析已知待分析的已知待分析的C语言子集的语法,用语言子集的语法,用EBNF表示如下:表示如下:main();|ID=if(条件条件)while()+|-*|/ID|NUM|()|=|=|!=实验目的:编制一个语法分析程序,实现对词实验目的:编制一个语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和法分析程序所提供的单词序列进行语法检查
4、和结构分析。结构分析。在上机在上机(一一)词法分析的基础上词法分析的基础上,采用递归子程采用递归子程序法或其他适合的语法分析方法序法或其他适合的语法分析方法,实现其语法实现其语法分析程序。要求编译后能检查出语法错误。分析程序。要求编译后能检查出语法错误。第三章第三章 词法分析及词法分析程序词法分析及词法分析程序有限自动机有限自动机FAFA确定的有限自动机确定的有限自动机DFADFA非非确定的有限自动机确定的有限自动机NFANFA文法是语言的生成系统,自动机是文法是语言的生成系统,自动机是语言的生成、识别系统语言的生成、识别系统。自动机自动机图灵机图灵机线性有界自动机线性有界自动机下推下推自动机
5、自动机有限自动机有限自动机一、概述一、概述理解一篇文章(或程序):单词级别作为起点。理解一篇文章(或程序):单词级别作为起点。编译程序也是在单词级别上来分析和翻译源程序。编译程序也是在单词级别上来分析和翻译源程序。词法分析是编译的基础。词法分析是编译的基础。编译过程的第一步。其功能为:编译过程的第一步。其功能为:依此扫描字符串形式的源程序中的各个字符,根据依此扫描字符串形式的源程序中的各个字符,根据语言词法规则,识别出其中的单词,并将其转换为语言词法规则,识别出其中的单词,并将其转换为内部编码形式的单词符号串作为输出。内部编码形式的单词符号串作为输出。通常采用二元式来表示一个单词符号的内部编码
6、。通常采用二元式来表示一个单词符号的内部编码。词法分析词法分析符号串序列符号串序列二元码序列二元码序列词法分析程序又称为扫描器,一般应完成以词法分析程序又称为扫描器,一般应完成以下任务下任务:1 1)识别出源程序中的单词符号,并将其转换为内部)识别出源程序中的单词符号,并将其转换为内部编码形式;编码形式;2 2)删除无用的空白字符、回车字符以及其它非实质)删除无用的空白字符、回车字符以及其它非实质性字符;删除注释。性字符;删除注释。3 3)进行预处理工作。)进行预处理工作。4 4)进行词法检查,报告所发现的错误。)进行词法检查,报告所发现的错误。视编译工作流程的组织,一些编译程序在词法分析视编
7、译工作流程的组织,一些编译程序在词法分析时,还要将所识别出的标识符填到符号表中。时,还要将所识别出的标识符填到符号表中。1 1、词法分析程序与语法分析程序的接口、词法分析程序与语法分析程序的接口1 1)词法分析与语法分析完全融合)词法分析与语法分析完全融合 词法分析基于正规文法词法分析基于正规文法(前后文无关文法前后文无关文法的特例的特例)进行进行,不特别把单词符号的规则分离不特别把单词符号的规则分离出来而统一作为语法规则来处理。出来而统一作为语法规则来处理。(2)(2)词法分析作为语法分析的子程序词法分析作为语法分析的子程序源程序源程序字符串字符串词法分析程序语法分析程序语法分析程序取取单单
8、词词回送回送单词单词(3(3)词法分析与语法分析完全分开)词法分析与语法分析完全分开 词法分析器读入整个源程序字符序列,识词法分析器读入整个源程序字符序列,识别单词,加工成等价的内部中间表示别单词,加工成等价的内部中间表示(二元码序二元码序列列),语法分析器从中读单词进行语法分析。,语法分析器从中读单词进行语法分析。文件构成:文件构成:(单词类别,单词属性)(单词类别,单词属性)源程序源程序字符串字符串词法分析程序词法分析程序单词流单词流语法分析程序语法分析程序把把词法分析安排为独立的一个阶段,词法分析安排为独立的一个阶段,可使编译程序结构简洁、清楚,改进可使编译程序结构简洁、清楚,改进编译程
9、序的效率,建立自动词法分析编译程序的效率,建立自动词法分析工具,增强编译程序的可移植性。工具,增强编译程序的可移植性。2 2、源程序的输入及预处理、源程序的输入及预处理首先将源程序文本进行预处理:剔除无用的空首先将源程序文本进行预处理:剔除无用的空白符、跳格、注释、回车、换行符,再将预处白符、跳格、注释、回车、换行符,再将预处理结果装入扫描缓冲区,在其中识别单词。理结果装入扫描缓冲区,在其中识别单词。词法分析器调用预处理子程序,预处理子程序词法分析器调用预处理子程序,预处理子程序处理出一串确定长度的输入字符,将其装进词处理出一串确定长度的输入字符,将其装进词法分析器指定的缓冲区中。扫描器在此缓
10、冲区法分析器指定的缓冲区中。扫描器在此缓冲区中直接进行单词识别。中直接进行单词识别。起点指起点指示器示器(指(指向新单词的向新单词的首字符首字符搜索指示搜索指示器器(向前搜(向前搜索以寻找单词索以寻找单词的终点的终点3、单词的表示和词法分析程序的实现、单词的表示和词法分析程序的实现单词的种类单词的种类1)关键字:)关键字:if,else,for 等。等。2)标识符:用来命名程序中出现的变量、数组、函)标识符:用来命名程序中出现的变量、数组、函数、过程、标号等。数、过程、标号等。3)运算符:)运算符:+、-、*、/、=、1)b=100 二元式表示如下:二元式表示如下:单词单词 二元式二元式 if
11、 (3,if)(5,()a (1,指向指向a的符号表的入口)的符号表的入口)(4,)1 (2,1)(5,)b (1,指向指向b的符号表的入口)的符号表的入口)=(4,=)100 (2,100)类别编码:标识符类别编码:标识符1 常数常数2 关键字关键字3 运算符运算符 4 界码界码 5使用助记符使用助记符 if(a1)b=100 二元式表示如下:二元式表示如下:单词单词 二元式二元式 if (IF,)(LP,)a (ID,a)(GE,)1 (INT,1)(RP,)b (ID,b)=(EQ,)100 (INT,100)二、正规文法和状态转换图二、正规文法和状态转换图程序设计语言的单词能用正规文法
12、来描述程序设计语言的单词能用正规文法来描述:字母字母 数字数字 字母字母字母、数字为字母、数字为VT有限自动机是识别或生成正规语言的识别器。有限自动机是识别或生成正规语言的识别器。有限自动机的直观图示,有限个结点组成的有有限自动机的直观图示,有限个结点组成的有向图。向图。结点代表状态,用圆圈表示。状态之间用箭弧结点代表状态,用圆圈表示。状态之间用箭弧连接,箭弧上的标记代表在输出结状态下可能连接,箭弧上的标记代表在输出结状态下可能出现的输入符号(类)。一张转换图只包含有出现的输入符号(类)。一张转换图只包含有限个状态,至少一个初态(带初箭头圆圈),限个状态,至少一个初态(带初箭头圆圈),若干个终
13、态(双圈)。若干个终态(双圈)。如箭弧上可以标记如箭弧上可以标记,称为转换图。,称为转换图。状态的转换状态的转换(1)后继状态为自身。)后继状态为自身。(2)后继状态为一个。)后继状态为一个。(3)后继状态为若干个。后继状态为若干个。状态转换图中每一条箭弧表示一个转换关系。状态转换图中每一条箭弧表示一个转换关系。S1S2S0aS3S3babbaba用右用右线性文法构造状态转换图线性文法构造状态转换图右右线性文法线性文法G=(VN,VT,P,S),有有k个个VN,则,则状状态转换图有态转换图有K+1个状态。个状态。S为初态结点,增加为初态结点,增加一个终态结点。一个终态结点。(1)对产生式对产生
14、式AaB,从结点从结点A引一条箭弧到引一条箭弧到结点结点B,并用符号并用符号a标记此箭弧。标记此箭弧。(2)对产生式对产生式Aa,从,从结点结点A引一条箭弧到引一条箭弧到终态结点终态结点Z,并用并用a标记这条箭弧。标记这条箭弧。GZ:Z 0A A 0A|1B B 1A|BZA0011ZZA001B1规范句型规范句型Z=0A=00A=001B=001Z=001*利用状态图识别字符串利用状态图识别字符串 从从状态图的初态出发,沿着某路径达到终态状态图的初态出发,沿着某路径达到终态结点,将路径上每一条箭弧上的标记字符依结点,将路径上每一条箭弧上的标记字符依次连接,即为状态转换图所能识别的全部符次连接
15、,即为状态转换图所能识别的全部符号串,这些符号串所组成的集合就是该状态号串,这些符号串所组成的集合就是该状态转换图所识别的语言。转换图所识别的语言。在在利用利用M对符号串对符号串w进行识别的过程进行识别的过程中,中,M中每一次状态转换都模拟了中每一次状态转换都模拟了G中的一次直接推导。中的一次直接推导。用用M对符号串进行识别的方法是一个对符号串进行识别的方法是一个自顶向下的分析方法。自顶向下的分析方法。用左用左线性文法构造状态转换图线性文法构造状态转换图左线性文法左线性文法G=(VG=(VN N,V,VT T,P,S),P,S),有有k k个个V VN N,则状态则状态转换图有转换图有K+1K
16、+1个状态。个状态。S S为终态结点,增加一为终态结点,增加一个初态结点个初态结点R R。(1 1)对产生式对产生式Aa,Aa,从初态结点从初态结点R R引一条箭引一条箭弧到结点弧到结点A A,并用符号并用符号a a标记此箭弧。标记此箭弧。(2 2)对产生式对产生式ABaABa,从结点从结点B B引一条箭弧引一条箭弧到结点到结点A,A,并用并用a a标记这条箭弧。标记这条箭弧。GS:S S1S1 S U1 S U1 U U0 U U0 U 0 U 0RU001S100011=U0011=U011=U11=S1=S在利用在利用M M对符号串对符号串w w进行识别的过程中,进行识别的过程中,M M
17、中每一次状态转换都模拟了中每一次状态转换都模拟了G G中的一次中的一次直接归约。直接归约。用用M M对符号串进行识别的方法是一个自对符号串进行识别的方法是一个自底向上的分析方法。底向上的分析方法。状态转换图的一种实现状态转换图的一种实现状态矩阵法状态矩阵法为程序设计语言的每一类单词建立一张状态为程序设计语言的每一类单词建立一张状态转换图,并合并为一张统一的状态图,据此转换图,并合并为一张统一的状态图,据此构造词法分析程序。构造词法分析程序。用状态矩阵表示状态转换图。用状态矩阵表示状态转换图。状态转换矩阵状态转换矩阵 B11 B12 B1mB=B21 B22 B2m .Bn1 Bn2 Bnm 行
18、行:状态状态S1,S2,Sn列列:输入符号输入符号a1,a2,amBij=BSi,aj:指示后继状态指示后继状态Sk和扫描器应完成的语义动和扫描器应完成的语义动作。作。S1S2.Sna1 a2 am031dd.2.d4EEd5+|-6dddG的状态转换图的状态转换图CurStat=0;/*状态矩阵驱动程序状态矩阵驱动程序*/FlagOfFS=NoneSeen;/*终态标志终态标志*/if(CurChar=EOF)return 0;While(CurChar!=EOF)if(Stat=TransMatCurStatCurChar)!=NULL)CurStat=Stat;advance();if(
19、CurStat是终态是终态)FlagOfFS=HasSeen;记下输入串中的当前位置及该状态相记下输入串中的当前位置及该状态相 关联的动作关联的动作;else if(FlagOfFS=NoneSeen)报告词法错误报告词法错误:略过当前词文及输入字符略过当前词文及输入字符;CurStat=0;else 回退到最近经历的那个终态回退到最近经历的那个终态 的的 输入字符位置输入字符位置;执行所记录的该终态的相关动作执行所记录的该终态的相关动作;Static int CurrentState;int LEX(void)int ch;CurrentState=0;while(CurrentState!
20、=EndState)ch=GetChar();EXCUTE(CurrentState,ch);return Class;int EXCUTE(int state,int symbol)switch(state)case 0:switch(symbol)case DIGIT:n=0;p=0;e=1;w=d;CurrentState=1;Class=ClassNo;break;case POINT:w=0;n=0;p=0;e=1;CurrentState=3;Class=ClassNo;break;Default:HandleOtherWord();Class=ClassOther;Current
21、State=EndState;break;Case 1:switch(symbol)case DIGIT:break;return CurrentState;三、有限自动机三、有限自动机FA1、确定的有限自动机、确定的有限自动机定义:一个确定的有限自动机是一个五元组:定义:一个确定的有限自动机是一个五元组:MD=(K,f,S0,Z)其中:其中:S:状态的非空有穷集状态的非空有穷集:输入字母表输入字母表f:是一个从是一个从K 到到K的单值映射的单值映射S0S是唯一的初态是唯一的初态Z:终止状态集,终止状态集,Z S状态转换图的一种形式描述。状态转换图的一种形式描述。对映射对映射f的定义进行扩充为
22、的定义进行扩充为K*:(1)f(S,)=S;(2)f(S,aw)=f(f(S,a),w)a,w *X=a1a2a3 f(S0,a1)=S1 f(S1,a2)=S2 f(S2,a3)=S3 f(S0,x)=f(S0,a1a2a3)=f(f(S0,a1),a2a3)=f(S1,a2a3)=f(f(S1,a2),a3)=f(S2,a3)=f(f(S2,a3),)=f(S3,)=S3一个一个DFA可表示成一个状态转换图可表示成一个状态转换图(转换图)或状态转换矩阵(转换图)或状态转换矩阵设设MD=(K,f,S0,Z),其中:其中:K=S0,S1,S2,S3=a,bf(S0,a)=S1 f(S0,b)=
23、S2f(S1,a)=S3 f(S1,b)=S2f(S2,a)=S1 f(S2,b)=S3f(S3,a)=S3 f(S3,b)=S3S0=S0 Z=S3用状态转换图、状态转换矩阵表示该用状态转换图、状态转换矩阵表示该DFAb bb bS1S1S2S2b ba aS0S0a aS3S3a ab ba ab bS1S1S2S2b ba aS0S0a aS3S3a ab ba aabS0S1S2S1S3S2S2S1S3S3S3S3输入输入状态状态b初始状态初始状态S0 S0 终止状态终止状态S3S3DFA M 能接受的符号串能接受的符号串x*:将初态到某一终态路径将初态到某一终态路径上的标记符顺次连接
24、上的标记符顺次连接 f(S0,x)=S S Z 当当S0 Z时时,被被M所接受。所接受。定义:若定义:若定义:若定义:若MD=(S,f,S0,Z)MD=(S,f,S0,Z)是一个是一个是一个是一个DFA,DFA,则该则该则该则该DFADFA所接收所接收所接收所接收的语言为能被该自动机所接收的符号串的集合,记为的语言为能被该自动机所接收的符号串的集合,记为的语言为能被该自动机所接收的符号串的集合,记为的语言为能被该自动机所接收的符号串的集合,记为L(M)L(M)L(M)=x|f(S0,x)Z,x*S0S1aaM1=(K,f,S0,Z)K=(S0,S1)=a S0=S0 Z=S0,S1f(S0,a
25、)=S1 f(S1,a)=S1 S1S0aa,bM2=(K,f,S0,Z)K=S0,S1=a,b S0=S0 Z=S1f(S0,a)=S1 f(S1,a)=S1 f(S1,b)=S1S1abM2=(K,f,S0,Z)K=S1 S0=S1 Z=S1f(S1,a)=S1 f(S1,b)=S12、非确定的有限自动机、非确定的有限自动机NFA定义:一个定义:一个NFA是一个五元组:是一个五元组:MN=(K,f,S0,Z)K、Z的的 定义同定义同DFAS0:初始状态集初始状态集S0 Kf是一个从是一个从K 到到2K的一个映射,的一个映射,K K的一个子的一个子集集如如 f(S0,a)=S1,S2扩充扩充
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第三 词法 分析
限制150内