编译原理 学习.pptx
《编译原理 学习.pptx》由会员分享,可在线阅读,更多相关《编译原理 学习.pptx(130页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、13.13.1设计扫描器时应考虑的几个问题设计扫描器时应考虑的几个问题词法分析阶段的必要性对于一个程序设计语言来说,关键字、标志符、常数、运算符及分隔符都是单词。它们的单词结构(即词法)也是用相应文法中的若干个产生式来描述的。词法分析与语法分析之间的关系通常有两种形式:1.词法分析作为独立的一遍(完全独立模式)词法分析可作为单独一遍来实现。这种词法分析的输出存入一个中间文件供语法分析使用。这样通过词法分析,就可以将字符串源程序转换成符号串源程序。字符串源程序 词法分析符号串源程序图3.1 词法分析单独作为一遍第1页/共130页22.词法分析程序作为语法分析程序的子程序(相对独立模式)将词法分析
2、和语法分析安排在同一遍中,此时词法分析作为语法分析程序的一个子程序。每当语法分析需要一个新的符号时,就调用词法分析子程序,词法分析子程序从字符串源程序中识别出一个具有独立意义的单词,将其返给语法分析。如图3.2。字符串源程序 词法分析器 语法分析器图3.2词法分析作为语法分析子程序 取符号送符号 第2页/共130页3完全独立模式的好处:改进编译程序的效率、增强编译程序的可移植性、完全独立模式的好处:改进编译程序的效率、增强编译程序的可移植性、结构清晰、简化设计。结构清晰、简化设计。相对独立模式的好处:词法分析器和语法分析器被设计在同一趟,省去了相对独立模式的好处:词法分析器和语法分析器被设计在
3、同一趟,省去了存放单词的终结文件存放单词的终结文件第3页/共130页4词法分析过程词法分析过程逐个读入源程序字符,然后按照构词规则切分逐个读入源程序字符,然后按照构词规则切分成一列单词,再转换成单词序列。单词是语言成一列单词,再转换成单词序列。单词是语言中具有独立意义的最小单位。中具有独立意义的最小单位。词标词标(token(token)是单词的机内表示,其格式由实)是单词的机内表示,其格式由实现系统规定。现系统规定。实现词法分析程序时,首先需要描述单词,其实现词法分析程序时,首先需要描述单词,其次需要执行某些相关操作识别单词。次需要执行某些相关操作识别单词。描述程序设计语言的词法的机制是描述
4、程序设计语言的词法的机制是3 3型文法和正型文法和正规式,识别机制是有穷状态自动机(规式,识别机制是有穷状态自动机(FAFA)。)。在词法分析过程中,与语法分析无关的单词应在词法分析过程中,与语法分析无关的单词应处理时可掠过,无需产生相应词标。处理时可掠过,无需产生相应词标。第4页/共130页5单词符号的内部表示单词符号的内部表示 词法分析的功能是识别出的具有独立意义的单词,并转化为相应的内部表示。词法分析的输出常采用二元式(class,value),如图3.3所示。class为以整数码或助记符,value则是该单词的值(如变量名在符号表中的序号,常数的二进制表示,以及运算符和分隔符的编码,等
5、等)class单词类别单词类别value单词值单词值图3.3词法分析程序的输出形式第5页/共130页6单词的分类单词的分类单词符号一般可分为下列五种:单词符号一般可分为下列五种:基本字,关键字;基本字,关键字;标识符;标识符;常数(量);常数(量);运算符;运算符;分隔符分隔符关键字关键字,运算符和分隔符每字为一类。标识符统一为一运算符和分隔符每字为一类。标识符统一为一类类,而常数一般按数据类型进行分类。而常数一般按数据类型进行分类。至于单词的值至于单词的值,一字一类的符号的类别号已能完全表示一字一类的符号的类别号已能完全表示相应的符号相应的符号,故不须再给出单词的值故不须再给出单词的值;但一
6、个类别中含但一个类别中含有多个单词有多个单词,则除了类别号则除了类别号,还须按某种编码给出单词还须按某种编码给出单词的值。的值。第6页/共130页7识别标识符的若干约定和策略识别标识符的若干约定和策略定义标识符的语法规则为 从语法上来说,标识符的长度似乎可以任意。然而,考虑实现技术,许多语言都对标识符的最大允许长度作了限制。第7页/共130页8设计扫描器时,按如下原则行事:1.如果一个标识符中的字符个数超过最大允许长度,则把尾部多出的字符截去;2.对于字符个数不超过最大允许长度的标识符,则按“尽可能长”的策略来识别标识符。一般而言,当一个语言的两种单词有相同的前缀时,其扫描器都应当考虑采用超前
7、搜索和多字符回退操作。第8页/共130页9源程序的输入及预处理源程序的输入及预处理为了提高读盘的效率和便于扫描器工作,通常采用缓冲输入的方案,即在内存设置一个适当大小的输入缓冲区,让操作系统直接将磁盘上的源程序字符串分批送入次缓冲区,供扫描器处理。实现源程序输入的一组函数(子程序)作为编译系统的最底层,称为输入系统。输入系统除了完成上述读盘任务外,还应支持超前搜索和多字符回退操作以及扫描器中依赖于系统的大部分操作。预处理工作包括将源程序中的注释、回车、换行、制表、空格、空白字符以及其他非实质性符号予以删除。第9页/共130页103.23.2正规文法和状态转换图正规文法和状态转换图v程序设计语言
8、中的单词是基本语法符号,单词符号的语法可用有效工具描述,且基于这类描述工具,可建立词法分析技术,进而建立词法分析程序的自动构造方法。v多数程序设计语言的单词语法都能用正规文法来描述。v为了直观描述正规文法,以方便单词识别,引入状态转换图。第10页/共130页11由正规文法构造状态转换图由正规文法构造状态转换图l 一个状态转换图是由一组矢线连接的有限个节点所组成的一个状态转换图是由一组矢线连接的有限个节点所组成的有向图。有向图。l 每个节点均代表在识别或分析过程中扫描器的状态,其中每个节点均代表在识别或分析过程中扫描器的状态,其中有一个是开始状态有一个是开始状态(带箭头带箭头),至少有一个状态是
9、结束状态,至少有一个状态是结束状态(双圈)。(双圈)。l状态间用矢线连接,矢线上标记有符号,表示在矢线射出状态间用矢线连接,矢线上标记有符号,表示在矢线射出端的状态下,读入矢线上标记的符号可转换到矢线指向的端的状态下,读入矢线上标记的符号可转换到矢线指向的状态。状态图只有有穷个状态。状态。状态图只有有穷个状态。12开始a0abb第11页/共130页12正规文法形式:Aa或ABa(左线性)或AaB(右线性)其中:A,BVn,aVt正规文法描述语言单词,状态转换图可识别单词,它们之间存在等价关系。一.对于右线性文法构造状态转换图设G=(Vn,Vt,P,S)是一右线性文法,Vn中的每个非终结符号对应
10、状态图中的一个结点,且的开始符号所标记的结点为初态结点;增设一个不属于的符号F标记终态结点。|VN|=k,共有k+1个节点(状态)。第12页/共130页131.对于G中的每一条形如Aa的规则,从结点A引一条矢线到终态结点F,并用符号a标记这条矢线。2.对于G中每一条形如AaB的规则,从结点A引一条矢线到结点B,并用符号a标记这条矢线。注意:文法G中含有无用符号和无用产生式须事先予以删除;若L(G),则初态结点S也同时是一个终态结点;若G中含有产生式A,则将结点A设置为终态结点;第13页/共130页14baabVSUa例如:文法GSSaU|bVUbV|aVaU|bbQ第14页/共130页15GS
11、:SaA|bBAbB|aD|aBaA|bD|bDaD|bD|a|bbbbZBASaaaba,bDaab第15页/共130页16例如G:设无符号数的一般形式:dmdm-1d1d0.d-1d-2d n Ed ddd.d.Ed;E;dd;dd;第16页/共130页170534126dddddd.EE图3.4文法G的状态图d第17页/共130页18状态图识别符号串状态图识别符号串 利用状态转换图可识别相应文法所表示的符号串利用状态转换图可识别相应文法所表示的符号串。12开始a0abb定义:设VT*,如果状态转换图中存在一条从初态到终态的路径,此路径上的标记符号顺序相连构成符号串,则称为状态图所识别串。
12、状态图识别语言:状态图所识别的串集合。第18页/共130页19 对符号串对符号串W=aW=a1 1a a2 2a a3 3a an n,a ai i V VT T 识别过程:识别过程:l从初态从初态S S出发,自左至右逐个扫描出发,自左至右逐个扫描W W中的字符,中的字符,在在S S状态下扫视的符号为状态下扫视的符号为a a1 1;l在节点在节点S S所射出诸矢线中寻找标记为所射出诸矢线中寻找标记为a a1 1的矢线的矢线(若不存在,则说明若不存在,则说明W W有错有错);l读入读入a a1 1,沿矢线方向到下一状态,在此状态时,沿矢线方向到下一状态,在此状态时扫描扫描a a2 2,l直至直至
13、W W中全部字符读完且进入终态中全部字符读完且进入终态F F,则,则W W已被接已被接受。受。2)状态转换图对符号串的识别第19页/共130页20bbbZBASaaaba,bDaab例:下面的状态图对于串baabba的识别SaA|bB,AbB|aD|a,BaA|bD|b,DaD|bD|a|b利用状态图识别串的过程,也即是为串建立一个推导的过程。第20页/共130页21结结 论论q 1 1、M M对符号串识别的方法是自顶向下的分析方法;对符号串识别的方法是自顶向下的分析方法;q 2 2、M M初态出发,沿某路径到达状态初态出发,沿某路径到达状态A Ak k,则,则a a1 1a a2 2a a3
14、 3a ak kA Ak k是是G G的一个句型,且是规范句型。当的一个句型,且是规范句型。当A A是终态时,是终态时,a a1 1a a2 2a ak k为为G G的句子。的句子。q 3 3、M M所识别的任一符号串所识别的任一符号串x x,必存在,必存在S S=*x=*x ,反之,反之,L(G)L(G)中的任一句子中的任一句子y y,必存在一条从,必存在一条从S S到到F F的路径,将的路径,将此路径上各矢线的标记依次连接起来所组成的符号串此路径上各矢线的标记依次连接起来所组成的符号串即为即为y y。M M能识别出能识别出L(G)L(G)中的全部句子。中的全部句子。第21页/共130页22
15、二、对于左线性文法构造状态转换图设G=(Vn,Vt,P,S)是一左线性文法,Vn中的每个非终结符号对应状态图中的一个结点。与右线性文法不同的是,增设一个不属于的符号R标记初态结点,并用S作为终态结点。|Vn|=k,共有k+1个节点(状态)。1.对于G中的每一条形如Aa的规则,从初态结点R引一条矢线到结点A,并用符号a标记这条矢线。2.对于G中每一条形如ABa的规则,从结点B引一条矢线到结点A,并用符号a标记这条矢线。第22页/共130页23例:SUa|VbUVb|aVUa|bbaabVSaQUbQS识别串:aabSVbUabaab从初态到终态的路径的标记连成的串为文法所定义串的左序。解决这一矛
16、盾把每条边改方向且把初态改终态,所有终态合成一个初态即可。第23页/共130页24例:设有正则文法GS:SU0|V1US1|1VS0|0画出该文法对应的状态图。解:根据状态图的画法,首先确定状态图的结点。文法中有三个非终结符号S、U、V,加上代表开始状态R的结点,因此共有四个结点,其中R结点为开始状态,S结点为终结状态。对于规则SU0|V1,则分别从结点U和结点V画指向结点S的弧线,并分别在弧线上标记0和1;对于规则US1|1,从S画指向U的弧线,从R画指向U的弧线,并分别在弧线上标记为1;对于规则VS0|0,分别从S和R画指向V画弧线,并分别在弧线上标记0。最终,我们可以画出该文法的状态图,
17、如图3.5所示。RUVS000111图3.5状态图课堂练习:画出标志符文法G的状态图SlSlSdl,dRlS第24页/共130页25 对于符号串W=a1a2a3an,aiVT 可对W识别。从初态F出发,自左至右逐个扫视W中的各个字符,在F下扫视的符号为a1;在节点F所射出诸矢线中寻找标记为a1的矢线(若不存在,则说明W有错);读入a1沿矢线所指方向到下一状态,在从此状态扫描a2,直到W中全部字符读完且进入终态S,则W已被接受。符号串的识别该过程为自底向上的分析。第25页/共130页26AaaabSBFba,bb例如:文法GS SAa|Bb|Sa|Sb ABa|a BAb|b识别串:abaab第
18、26页/共130页27例:设有正则文法GS:SU0|V1US1|1VS0|0画出该文法对应的状态图。例:对句子0110进行的分析。首先,在开始状态R下扫描的第一个符号是0,转到状态V,表示0是句柄,归约到V。接下来,在状态V扫描1,转到状态S,此时句柄为V1,归约成S。再往下扫描1,由状态S转到状态U,表示句柄为S1归约为U。最后,扫描0,转到状态S,此时句柄为U0,归约为S,RUVS000111图3.5状态图第27页/共130页28图3.6(a)列出分析的每一步。形成图3.6(b)所示的语法树。自底向上的分析。步骤步骤状态状态扫描的字符扫描的字符余留部分余留部分1R01102V1103S10
19、4U05SSU0S1V103.6(a)输入串0110分析过程图3.6(b)输入串0110的语法树第28页/共130页29从上例的分析过程可看出,非终结符号仅作为规则右部第一个符号出现,所以,第一步对应形式A a的规则,总是把输入串的第一个符号作为句柄归约成一个非终结符号。其后各步总是应用形式为AB a的规则,把当前句型的头两个符号作为句柄归约成一个非终结符号A。在执行这个规约时,当前状态是B,扫描的字符是a,下一个状态是A。状态转换图可直观而清晰的描述单词符号的识别过程,可视为一种特殊的流程图,并可作为编写扫描器的依据。第29页/共130页30结结 论论q 1、M对符号串识别的方法是自底向上的
20、分析方法;q 2、M初态出发,沿某路径到达状态Ak,则Aka1a2a3ak是G的一个句型,当A是终态S时,a1a2ak为G的句子。q 3、M所识别的任一符号串x,必存在x能规约为S,反之,L(G)中的任一句子y,必存在一条从F到S的路径,将此路径上各矢线的标记依次连接起来所组成的符号串即为y。M能识别出L(G)中的全部句子。第30页/共130页31状态图的一种实现状态图的一种实现-状态矩阵法状态矩阵法程序设计语言一般含有若干类单词符号,我们可首先为每类单词建立一张状态转换图,然后将这些状态转换图合并成一张统一的状态图,最后再据此构造词法分析程序。计算机内表示状态转换图的方法之一是状态矩阵状态矩
21、阵:状态图中的各个状态S1,S2,Sn为行,以可能输入的输入符号a1,a2,am为列,组成一个n行m列矩阵。第31页/共130页32a1a2amBij=BSi,aj含义:当前状态Si,正扫视符号aj,则以序偶(Si,aj)去查询矩阵B,扫描器根据Bij的指示,执行相应的语义动作,转到Sk状态。若某aj不与Si配对,即状态图中从节点Si不存在以aj为标记的射出矢线,则Bj置为“error”,进行词法错误检查和处理。第32页/共130页33开始当前状态置为0标置终态”未经历”输入字符为文件结束符?当前状态对输入字符有后继动作?继续进行状态转移当前状态是终态?标置终态”已经历”记下当前状态和输入字符
22、位置经历过终态?回退到最近经历的终态的输入字符位置执行相应语义动作报告词法错误略去当前词文及输入字符当前状态置为0返回NNNYYY程序3.2状态矩阵驱动程序第33页/共130页343.3 3.3 有限自动机(有限自动机(FAFA)有限自动机是一种具有离散输入与输出系统的数学模型,是状态转换图的形式化。在这种数学模型中有有限个状态,状态间存在着转换关系。系统可以处于有限个状态中的任意一个之中,系统的当前状态概括了有关过去输入的信息。当系统处在某个状态之下读入一个字符时,会使系统所处的状态发生变化,从而形成状态转换。改变后的状态称为后继状态。第34页/共130页353.3 3.3 有限自动机(有限
23、自动机(FAFA)在状态转换中,后继状态可能为一个,也可能为多个。有限自动机分确定的和不确定的。所谓“确定的有限自动机”(Deterministic Finite Automata DFA)是指在当前的状态下,输入一个符号,有限自动机将转换到唯一的后继状态;“不确定的有限自动机”(Nondeterministic Finite Automata NFA)在当前状态下输入一个符号,可能有两种或两种以上可选择的后继状态。第35页/共130页36确定的有限自动机确定的有限自动机 1、确定的有限自动机定义将前面介绍的状态转换图抽象,可得到一个确定的有限自动机M(记作DFAM)是一个五元组:M=(K,f
24、,S0,Z)其中:K:是一个有限状态的集合。:是一个有限个输入字符组成的字母表f:状态转换函数,是一个KK的单值映射,形式为f(p,a)=q。S0:S0K,是唯一的初始状态。Z:ZK,称为终结状态集合。可见,一个确定的有限自动机是相应的状态图的一种形式描述。这是一个单值函数,指明当前状态为p,输入符号为a时,自动机将从状态p转换到下一个状态q,q称为p的后继状态。第36页/共130页37DFAM=(S,U,V,Q,a,b,f,S,Q)其中f定义为:f(S,a)=Uf(V,a)=Uf(S,b)=Vf(V,b)=Qf(U,a)=Qf(U,b)=V例:SaU|bVUbV|aVaU|bbaabVSUa
25、bQ第37页/共130页382、确定的有限自动机状态图 确定的有限自动机M可以用状态图来表示。状态图中的结点代表状态,它与自动机中的状态集合K相对应,其中包括初始状态S0和终结状态集合Z。状态间用矢线连接,矢线上标记有输入符号,每条矢线对应一个状态转换函数f,矢线上标记的输入符号集合就是字母表。例3.3设有限自动机DFAM=(0,1,2,3,a,b,f,0,3)f(0,a)=1f(0,b)=2f(1,a)=3f(1,b)=2f(2,a)=1f(2,b)=3f(3,a)=3f(3,b)=3画出该自动机对应的状态图。解:该自动机对应的状态图如图3.7所示。a,b0123baaabb图3.7状态图第
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译原理 学习 编译 原理
限制150内