
描述程序设计语言中的单词字,进一步为词法分析程序的自动构造寻找特殊的方法和工具。
主要内容:
确定有限自动机DFA
确定有限自动机DFA的实现
非确定有限自动机NFA
NFA到DFA的转换
DFA的化简
确定有限自动机DFA
确定有限自动机(DFA:Deterministric Finite Automata ) 为一个五元组(∑,SS,S0,f,TS),其中:
■∑是一个有穷字母表,它的每个元素称为一个输入字符;
■SS是一个有穷集,它的每个元素称为一个状态;
■S0∈ SS是唯一的一个初始状态;
■f是在SS× ∑→ SS上的转换函数
■TSSS,是一个终止状态集,又称为接受状态集
构造正规式1(0|1)101相应的DFA。
先构造NFA
确定化 0 1 X A A A AB AB AC AB AC A ABY ABY AC AB
重新命名,令AB为B。
DFA最小化
首先得到两个子集K1 = {1,2,3} 和 K2 = {4}。
考察K1:由于{1,2,3}a = {1,2,4} K1,也 K2,所以K1可需要被分割。
又因为{1,3}a = {2},{1,3}b = {3},
所以将原状态集合分割成以下子集:K11={2},K12={1,3}。
目前划分得到的子集为:K11={2},K12={1,3},K2 = {4}。
考察K12:{1,3}a = {2} K1,{1,3}b = {3}K1,所以K1不可再分割
扩展资料
词汇分析法的条件
1、输入缓冲区
成对且对半互补的输入缓冲区模式。
n: 取2的整次幂;每个半区的末尾设置标志“ eof ” 表示读入该半区的源程序的结束;
B:单词w开始指针; F:扫描w的指针;
两个缓冲区的输入模式
2、预处理程序: (作用)
1) 减少内存空间占用;
2) 减轻扫描器实质性处理的负担;
3、预处理程序主要任务:
1) 滤掉源程序中的非单词成分(如无用空格;换行符等);
2) 其他的预处理工作:滤掉注释;宏替换;文件包含的嵌入;条件编译的嵌入。
1、使用C/C++程序设计语言和递归下降子程序的方法编写该函数绘图语言的词法分析器。并要求设计一个词法分析器的测试小程序来调用自己编写的词法分析器测试各种不同的输入。
2、词法分析的任务是对输入的字符串形式的源程序按顺序进行扫描,在扫描的同时,根据源语言的词法规则识别具有独立意义的单词(符号),并产生与其等价的属性字流(内部编码)作为输出。通常属性字流即是对识别的单词给出的标记符号的集合。
二、分析与设计
词法分析程序一般具有如下功能:读入字符串形式的源程序;识别出具有独立意义的最小语法单位:单词。
事实上,由正规表达式到最小化DFA的转换源程序中的测试生成串部分就是对所输入的单词进行判断,看其是否能被生成的DFA接受(也就是这个单词是否符合正规式定义的要求)。这本质上就是一个简单的词法分析。
定义某种语言的单词,并给出编号。该语言单词包括:保留字、运算符、标识符、常量、格式符等。根据给定的语言子集构造词法分析器。输出为中间文件。
在设计时为了便于理解,不使用内部编码而用枚举对同类型的单词进行标识。例如所有的常量统一用“CONST_ID”对其进行标识,当扫描时遇到常量就输出该常量的值和“CONST_ID”标识。
这里给出词法分析程序大概的设计方法:
1、根据要求写出词法分析的正规文法G;
2、根据正规文法G,写出正则式RE;
3、根据正则式RE,画出NFA;
4、将NFA转化为DFA;
5、将DFA转化为mininum state DFA;
6、mininum state DFA就是词法分析程序的流程图,根据此流程图编写相应的词 法分析程序。
以下是较为详细的设计:
①总体结构与模块划分
以上就是关于构造能识别以下单词的DFA{状态转换矩阵形式} 急急急全部的内容,包括:构造能识别以下单词的DFA{状态转换矩阵形式} 急急急、构造与a(a|b)*b(a|b)等价的状态最少的DFA,按如下步骤求解、怎样用C++编写计算器的测试程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)