词法分析算法优秀PPT.ppt

上传人:hg158****2095 文档编号:86194006 上传时间:2023-04-14 格式:PPT 页数:24 大小:77.50KB
返回 下载 相关 举报
词法分析算法优秀PPT.ppt_第1页
第1页 / 共24页
词法分析算法优秀PPT.ppt_第2页
第2页 / 共24页
点击查看更多>>
资源描述

《词法分析算法优秀PPT.ppt》由会员分享,可在线阅读,更多相关《词法分析算法优秀PPT.ppt(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、1、从正规式到、从正规式到NFAn试验目的:实现由正规式构造试验目的:实现由正规式构造NFA的算法,的算法,n 加深对该算法的理解。加深对该算法的理解。n试验要求:试验要求:n输入:随意一个正规式输入:随意一个正规式r;n输出:接受输出:接受L(r)的的NFA N。n注:注:NFA的表现形式不限。的表现形式不限。算法回顾算法回顾 n首先构造识别首先构造识别 和字母表中一个符号的和字母表中一个符号的NFAi开始开始 识别正规式识别正规式 的的NFAafif开始开始识别正规式识别正规式a的的NFAn构构 造造 识别主算符为选择的正规式的识别主算符为选择的正规式的NFA fi开始开始识别正规式识别正

2、规式s|t的的NFAN(s)N(t)n构造识别主算符为连接的正规式的构造识别主算符为连接的正规式的NFA iN(s)f开始开始识别正规式识别正规式st 的的NFAN(t)n构造识别主算符为闭包的正规式的构造识别主算符为闭包的正规式的NFA N(s)f开始开始识别正规式识别正规式s*的的NFAi n对于加括号的正规式对于加括号的正规式(s)(s),运用,运用N(s)N(s)本身作为它本身作为它的的NFANFA。所用数据结构提示所用数据结构提示n用用字符串字符串存储正规式存储正规式;n用用结构体数组结构体数组或或链表链表存放状态转换图存放状态转换图 struct NFA int from;int

3、to;char*varch;表示经过字符串表示经过字符串varch,from到到to状态。状态。n中间过程可借助栈完成。中间过程可借助栈完成。算法提示算法提示n利用算符优先的思想来处利用算符优先的思想来处理正规式中所涉及的各种理正规式中所涉及的各种算符(算符(*,|,(,),(,),)所对应的操作。)所对应的操作。n依据各运算符间的优先关依据各运算符间的优先关系,构造相应的算符优先系,构造相应的算符优先关系表。如右表。关系表。如右表。n用字符串存储输入的正规用字符串存储输入的正规式,利用算符优先分析过式,利用算符优先分析过程,来分析输入的字符串。程,来分析输入的字符串。程序流程n#入符号栈;n

4、输入串+#(将输入串中的连接用代替);nWhile(输入字符!=#|符号栈顶元素!=#)n if(输入字符是小写字母或数字)构造识别正规式a的NFA;NFA的弧入队列;起始节点入状态栈;读取下一个字符。else 比较符号栈顶元素和输入字符的优先关系(查表)n n case :n 符号栈栈顶元素出栈;n if(符号栈顶元素=|)n 状态栈2个栈顶元素出栈,分别为s,t;构造识别正规式s|t 的NFA;NFA的弧入队列;起始节点入状态栈;n else if(符号栈顶元素=)n 状态栈2个栈顶元素出栈,分别为s,t;构造识别正规式st的NFA;NFA的弧入队列;起始节点入状态栈;else if(输入

5、字符=*)状态栈1栈顶元素s出栈;构造识别正规式s*的NFA;NFA的弧入队列;起始节点入状态栈;读取下一个字符。n else error!n n把状态栈顶元素出栈,该元素的弧的起始节点为整个NFA的起始节点,该弧的终止节点为整个NFA的终止节点。2、从、从NFA到到DFAn试验目的:试验目的:n 驾驭子集法,即将驾驭子集法,即将NFA转换为与之等价的转换为与之等价的DFA的算法。的算法。n试验要求:试验要求:n输入:随意一个输入:随意一个NFA N;n输出:一个接受同样语言的输出:一个接受同样语言的DFA D。n注:注:DFA的表现形式不限。的表现形式不限。子集法回顾子集法回顾初始时,初始时

6、,_closure(s0)是是Dstates中唯一的状态且未被记;中唯一的状态且未被记;While Dstates中存在一个未标记的状态中存在一个未标记的状态T do begin 标记标记T;For 每个输入符号每个输入符号a do begin U:=_closure(s0)(move(T,a);If U没在没在Dstates中中 then 将将U作为一个未标记的状态添加到作为一个未标记的状态添加到Dstates中;中;end end实现思路实现思路1、构造数据结构:、构造数据结构:图的数据结构;图的数据结构;转换关系的数据结构。转换关系的数据结构。2、求图的起先节点的、求图的起先节点的-cl

7、osure,作为子集链,作为子集链表的头节点。然后对其表的头节点。然后对其-closure 中的每个中的每个节点,依据转换关系,求出新的子集,将新节点,依据转换关系,求出新的子集,将新求出的子集插入到子集链表的尾部。求出的子集插入到子集链表的尾部。实现方法实现方法构造主要的数据结构:构造主要的数据结构:struct diagram int snum;/节点编号节点编号move*transfer;/转换关系转换关系diagram*next;/图的数据结构图的数据结构实现方法实现方法构造主要的数据结构:构造主要的数据结构:struct subset int snum;/节点编号,节点编号,char

8、 closureMAX;/该节点中包含原来该节点中包含原来 的哪些节点,也就是其的哪些节点,也就是其_closure move*transfer;/来源关系来源关系subset*next;/子集的数据结构子集的数据结构实现方法实现方法构造主要的数据结构:构造主要的数据结构:struct moveint point;/来自或转向哪一个节点来自或转向哪一个节点char input;/转向条件转向条件move*next;/存储来源关系存储来源关系程序流程程序流程n(1)读取文件中的数据,组成图的初始链表。)读取文件中的数据,组成图的初始链表。n(2)将图的起先节点加入到其子集节点的)将图的起先节点加

9、入到其子集节点的closure数组中,数组中,调用求调用求-closure的子函数求出图起先节点的的子函数求出图起先节点的-closure 存存储在该子集节点的储在该子集节点的closure数组中。将该子集作为作为子数组中。将该子集作为作为子集链表的头节点。集链表的头节点。n(3)遍历子集链表,对子集节点中)遍历子集链表,对子集节点中closure数组中的每个数组中的每个元素,对其转换输入中的非元素,对其转换输入中的非元素,构造一个新的子集节元素,构造一个新的子集节点,将该输入之后所到达的节点插入新构造的子集节点的点,将该输入之后所到达的节点插入新构造的子集节点的closure数组中,调用求数

10、组中,调用求-closure的子函数求该子集节点的子函数求该子集节点的的-closure,存储在该子集节点的,存储在该子集节点的closure数组中。同时数组中。同时构造构造转换关系节点,将该输入字母和来源节点编号填构造构造转换关系节点,将该输入字母和来源节点编号填入该转换节点中,将该转换节点挂在刚才新构造的子集节入该转换节点中,将该转换节点挂在刚才新构造的子集节点上。点上。n(4)将新构造的子集节点插入子集链表中。)将新构造的子集节点插入子集链表中。关键算法实现思路关键算法实现思路n求求-closure:n遍历遍历closure数组中的每个元素,假如该元数组中的每个元素,假如该元素节点的转换

11、输入(图数据结构)中存在素节点的转换输入(图数据结构)中存在,则把输入,则把输入之后能到达的那个节点插入之后能到达的那个节点插入closure数组(尾插法)。数组(尾插法)。留意事项留意事项(1)全部的插入操作,在插入的时候都须要比较即将插入)全部的插入操作,在插入的时候都须要比较即将插入的元素是否已经存在于插入对象中,假如已经存在,则不的元素是否已经存在于插入对象中,假如已经存在,则不插入。插入。(2)对于子集的插入,接受尾插法,插入的时候给新的子)对于子集的插入,接受尾插法,插入的时候给新的子集编号。比较两个子集是否相同,是比较子集数据结构中集编号。比较两个子集是否相同,是比较子集数据结构

12、中的的closure数组中的元素是否相同。如个有相同的子集,数组中的元素是否相同。如个有相同的子集,则只把转换关系节点加入到已有的子集节点的转换关系链则只把转换关系节点加入到已有的子集节点的转换关系链表中,不插入该子集节点。表中,不插入该子集节点。(3)由于新的子集是在插入时才获得编号,所以,子集节)由于新的子集是在插入时才获得编号,所以,子集节点中转换关系链表和图中的转换链表有含义有所差别。图点中转换关系链表和图中的转换链表有含义有所差别。图中的是目的节点,输入字符;子集中是来源节点,输入字中的是目的节点,输入字符;子集中是来源节点,输入字符。符。(4)为了便于比较)为了便于比较closur

13、e数组,在每次求完数组,在每次求完-closure之之后,有必要对后,有必要对closure数组中的元素进行排序。数组中的元素进行排序。3、DFA的最小化的最小化n试验目的:试验目的:n 驾驭最小化驾驭最小化DFA的算法。的算法。n试验要求:试验要求:n输入:随意一个输入:随意一个DFA D;n输出:一个接受同样语言的输出:一个接受同样语言的DFA D,且状态数最,且状态数最少。少。n注:注:DFA的表现形式不限。的表现形式不限。算法回顾算法回顾q全部状态分成两个子集终态集和非终态集;全部状态分成两个子集终态集和非终态集;q运用判定状态可区分原则分别对两个子集的状态运用判定状态可区分原则分别对

14、两个子集的状态进行分析和划分,把相互等价的状态构成一个子进行分析和划分,把相互等价的状态构成一个子集,若发觉不等价,接着划分;集,若发觉不等价,接着划分;q当无法运用可区分原则时,则看当无法运用可区分原则时,则看Ia是否全包含在现是否全包含在现行划分中,是则不行区分,不是则接着划分行划分中,是则不行区分,不是则接着划分q从每个子集中选出一个状态做代表,即可构成简从每个子集中选出一个状态做代表,即可构成简化的化的DFA;q含有原来初态的子集仍为初态,各终态的子集仍含有原来初态的子集仍为初态,各终态的子集仍为终态。为终态。主要数据结构主要数据结构n用链表实现用链表实现DFA的构造,由的构造,由节点

15、链表节点链表和和转换弧链表转换弧链表组成:组成:n struct node/节点的定义节点的定义 int pos;/节点在哪个组中节点在哪个组中 int num;/节点的序号节点的序号 int accept;/节点是否为接受状态节点是否为接受状态 struct node*next;NODE;主要数据结构主要数据结构nstruct arc/弧的定义弧的定义n int start;/起先的顶点位置起先的顶点位置n char input;/弧上所接受的输弧上所接受的输入字符入字符n int end;/结束的顶点位置结束的顶点位置 n struct arc*next;n ARC;主要数据结构主要数据结

16、构nNODE *fenzuMAX;/划分(组)的定义划分(组)的定义nstruct groups/分组后各节点所在组位置分组后各节点所在组位置 int n;/属于哪个组属于哪个组 int i;/在组中的位置在组中的位置 GROUPS;nGROUPS GROUPMAX程序流程程序流程n“尾插法尾插法”构建各链表;构建各链表;n从文件中读入从文件中读入DFA;n进行初次划分进行初次划分debided1()形成形成0,将,将accept为为0的全部结的全部结点构建链表点构建链表fenzu0,其,其pos为为0,将,将accept为为1的全部结的全部结点构建链表点构建链表fenzuMAX-1,其,其p

17、os为为MAX-1,并形成,并形成GROUP0和和GROUPMAX-1;n执行最小化,对每一输入字符遍历以上各链表,对每个结执行最小化,对每一输入字符遍历以上各链表,对每个结点点.num弧弧.start,查看该弧查看该弧.end的的GROUP.n是否相等,是否相等,相等则不划分,若不相等则需划分,构建链表相等则不划分,若不相等则需划分,构建链表fenzu1、fenzuMAX-2等等;n划分完成后,每组选取头结点为代表,删除节点链表上的划分完成后,每组选取头结点为代表,删除节点链表上的多余结点和等价节点。包含原来起先节点所在的节点仍为多余结点和等价节点。包含原来起先节点所在的节点仍为起先节点,包含原来终态节点的全部节点均为终态节点。起先节点,包含原来终态节点的全部节点均为终态节点。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > pptx模板 > 商业计划书

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁