文档库 最新最全的文档下载
当前位置:文档库 › 设计有穷自动机DFA实现C

设计有穷自动机DFA实现C

设计有穷自动机DFA实现C
设计有穷自动机DFA实现C

设计有穷自动机DFA实现C++简单程序的词法分析、扫描

前面两篇(一、二)只是直观地针对已明确给出的教学语言Tiny 源程序进行直接的词法分析(其实根本就称不上),不具有一般性(下面这个针对C++源程序的词法分析也相当单一,考虑面不足)。下面是我们的课程实验,需要结合课堂上学到的利用有限自动机DFA的方法来设计并分析源程序,提取出符合要求的Token。

根据老师给出的课件以及教材上的内容,扫描程序(词法分析)有下面3种实现方式,前面两篇(一、二)就是属于“直接编写”这一类,而本文则是“DFA”这一类。

1、按实验要求(如下),目前只拙劣地实现了第(1)和(5)点。

而且第(1)点中有两个要求未能完成:

★浮点数,因为包含单行、多行注释的DFA已经很混乱了,这部分暂时先不实现,考虑将来用“表驱动法”(即状态转换表)来实现。

★注释,与教材类似不打印单行和多行注释,因此代码实现中少了处理注释的内容。

实验中用到的C++源程序与要求如下图:

2、对实验要求中的“样例程序”稍微修改了一下。

★头文件 #include 被改为#include "iostream.h",即iostream.h 是由双引号"" 而不是尖括号< > 包围的,实际上回到了C 的代码规范。这样修改是因为原本确定DFA 时考虑不全面,忽略了“小于等于<=,大于等于>=,判断==,不等于!= ”这几种特殊情况,因为他们会跟< > = ! 这几个特殊字符造成二义性。

★同时,C++ 中的IO 有“ >> 与<< ”也可能与上述特殊字符造成歧义,这个使得实现代码中的unGetNextChar(int step) 与教材中的有所不同,因为该函数带了一个“步长参数step”,其实也是为了迁就#include<iostream.h> 中的> 与代码中的>> 和>= 。

其实,"iostream.h"也被作为字符串识别了,目前尚改进不了。

★另外为了测试算术运算符,对实验要求中的样例程序进行了修改,程序按照该样例作为输入,如下图加上了一个“i = i + 2;”语句:

3、程序中的打印输出模仿了教材中的样例输出。

★对于以上样例输入,最终程序输出结果如下:

4、针对该C++源程序设计的DFA 图大致如下:

5、实现代码(Java)

近来喜欢上了Vim的代码高亮,看着清晰明朗,下面是整个实现代码在Vim下的截图,文本代码在本文最后:

计算机考博试题计算理论及答案

计算理论 字母表:一个有穷的符号集合。 字母表上的字符串是该字母表中的符号的有穷序列。 一个字符串的长度是它作为序列的长度。 连接反转Kleene星号L* ,连接L中0个或多个字符串得到的所有字符串的集合。 有穷自动机:描述能力和资源极其有限的计算机模型。 有穷自动机是一个5元组M=(K,∑,?,s,F),其中 1)K是一个有穷的集合,称为状态集 2)∑是一个有穷的集合,称为字母表 3)?是从KX∑→K的函数,称为转移函数 4)s∈K是初始状态 5)F?K是接收状态集 M接收的语言是M接收的所有字符串的集合,记作L(M). 对于每一台非确定型有穷自动机,有一台等价的确定型有穷自动机 有穷自动机接受的语言在并、连接、Kleene星号、补、交运算下是封闭的。 每一台非确定型有穷自动机都等价于某一台确定型有穷自动机。一个语言是正则的当且仅当它被有穷自动机接受。 正则表达式:称R是一个正则表达式,如果R是

1)a,这里a是字母表∑中的一个元素。 2)?,只包含一个字符串空串的语言 3)?,不包含任何字符串的语言 4)(R1∪R2),这里R1和R2是正则表达式 5)(R10R2),这里R1和R2是正则表达式 6)(R1*),这里R1*是正则表达式 一个语言是正则的当且仅当可以用正则表达式描述。 2000年4月 1、根据图灵机理论,说明现代计算机系统的理论基础。 1936年,图灵向伦敦权威的数学杂志投了一篇论文,题为《论数字计算在决断难题中 的应用》。在这篇开创性的论文中,图灵给“可计算性”下了一个严格的数学定义,并 提出著名的“图灵机”(Turing Machine)的设想。“图灵机”不是一种具体的机器,而是一种思想模型,可制造一种十分简单但运算能力极强的计算机装置,用来计算所有能想像得到的可计算函数。这个装置由下面几个部分组成:一个无限长的纸带,一个读写头。(中间那个大盒子),内部状态(盒子上的方块,比如A,B,E,H),另外,还有一个程序对这个盒子进行控制。这个装置就是根据程序的命令以及它的内部状态进行磁带的读写、移动。工作带被划分为大小相同的方格,每一格上可书写一个给定字母表上的符号。控制器可以在带上左右移动,它带有一个读写出一个你期待的结果。这一理论奠定了整个 现 代计算机的理论基础。“图灵机”更在电脑史上与“冯·诺依曼机”齐名,被永远载

计算机研究生《计算理论》复习题

1、请你从形式定义、计算过程和对应的语言特点关系等诸方面综合比较DFA、PDA和图灵机 2、对于简单文法(正则语言、上下文无关语言),能够根据其产生式写出其语言 3、正则语言泵引理和上下文无关语言泵引理的理解、相互比较和应用 4、最简DFA、最简PDA的概念;DFA和PDA的简化过程;(带ε和不带ε的)NFA化简成最简DFA的过程 5、图灵机的Golder编码和通用图灵机的编码 6、上下文无关文法的乔姆斯基范式 7、DFA的计算过程 8、上下文无关文法的推导过程以及其歧义相关概念及分析 9、关于四类乔姆斯基语言及其对应的自动机类型特点分析 10、四类乔姆斯基语言的各种运算类型并形式化表示 11、关于CFG和DFA的若干判定问题 12、关于若干渐进符号:同阶渐进符号Θ、大O、小O和大Ω符号的含义和用法 13、请从NP类问题、P类问题、确定型单带TM、确定型多带TM、非确定型TM等角度综述 时间复杂性规律 相关例题: 1、请你综合比较DFA、PDA和图灵机 2、请写出下列表达式生成的正则语言 1)设有文法G=(V,T,P,S),其中V={S,A,B},T={a,b},P:S→aB;S→bA;A→bAA;A →a;A→aS;B→b;B→bS;B→aBB 请写出L(G)= 2)设一个有穷自动机M=(Q,∑,δ,q0,F),其中Q={q0,q1,q2,q3),∑={0,1}, F={q0},δ如下: δ(q0,0)=q2, δ(q0,1)=q1, δ(q1,0)=q3, δ(q1,1)=q0 δ(q2,0)=q0, δ(q2,1)=q3, δ(q3,0)=q1, δ(q3,1)=q2 请写出L(M)= 3)设有文法G=({S,A},{a,b,c,d};R,S),其中R:S→aSd|aAd, A→bAc|bc 请写出L(G)= 3、用泵引理证明下列论点 1)A1={a n b n c n|n≥0}不是正则语言 2)D={ww|w∈{0,1}*}不是上下文无关语言 4、把下面状态转换图代表的DFA变化成最简DFA

编译原理课程设计报告(无符号数的有穷自动机的实现)

编译原理课程设计设计题目:有限自动机的运行 年级:计062 姓名:黄思铭 学号: 200600401062 日期: 2010-5-18 指导教师: 陈望明 广西工学院计算机工程系

设计目的: 1、 理解有限自动机的作用 2、 利用转态图和状态表表示有限自动机 3、 以程序实现有限自动机的运行过程 设计内容:(注:题目详细要求) 利用状态表和有限自动机的运行原理编制程序,使得程序能够识别一个输入串是否为一个有效的符号串,具体可以选择下面之一:无符号定点实数、自然数、整数、十六进制数或其它自己定义的符号串。 一、分析原理 词法分析:就是从左至右逐个字符地对源程序进行扫描,产生单词序列,用以语法分析。 在这里,我们先把文法转换成有穷自动机,然后构造出状态表,再由状态表构造出程序。 二、分析的算法 将G[<无符号数>]文法转换成有穷自动机: 构造状态矩阵;将有穷自动机的状S 1 S 2 ……S n 及输入的字a 1 a 2 ……a m 构成一个n*m 的矩阵。

再写一个程序,把状态矩阵用二维数组表示。程序通过输入的字符转换状态,从而可以识别出单词。 本程序的关键在状态表和缓冲区的运用。首先定义了一个布尔型函数ReadALine把输入的字符串送到缓冲区中;然后定义了布尔型函数Run 和Getchar实现对输入字符串的正确性判断,更改Run函数可以改变程序功能:如可将状态表改变成识别“偶数”的有限自动机的状态表。 三、程序流程图

四、课程设计出现的问题及解决的方法 刚开始写该程序时,虽然感觉个人的编程能力不错,但由于对编译原理的自动机的实现掌握不足,难以入手。但经过对问题的更深入了解和分析,再通过网上和书本的资料的细读,最后终于把程序编写出来了。程序中,碰到的最大的问题就是状态表的构造和如何把它转变为一个程序的实现过程。解决的方法当然是看书。 五、课程设计的体会 首先,题目给出的文法是有小毛病的。我个人认为<无符号数>不可能推出 . <十进制数> 或者 e <指数部分>的。在写这个程序是只要对编译原理书本词法分析分析很熟悉就可以比较容易地 写出该程序。通过这次课程设计,我对程序的编译和运行有了更进一步的了解,更好地掌握了编译原理的词法分析过程。 六、程序清单 #include //引入库函数 #include //引入基本的库函数 #include //引入字符串的库函数 //状态表相关存储信息: #define STATE_NUMBER 7 //状态数目 #define CHAR_NUMBER 4 //输入字符的种类: . ; d ; e/E ; +/- #define DOT 0 //输入数字在状态表中位于第0列 #define DIGIT 1 //小数点位于状态表的第1列 #define E 2 //E位于状态表的第2列 #define AD 3 //+/-运算符位于状态表的第3列 //State[][]为状态表,以整数组形式存放,0,1,2,3,4,5,6表示状态,-1表示没有此状态 int State[STATE_NUMBER][CHAR_NUMBER]= { {1,2,3,-1}, {-1,4,-1,-1}, {1,2,3,-1}, {-1,5,-1,6}, {-1,4,3,-1}, {-1,5,-1,-1}, {-1,5,-1,-1} };

设计有穷自动机DFA实现C

设计有穷自动机DFA实现C++简单程序的词法分析、扫描 前面两篇(一、二)只是直观地针对已明确给出的教学语言Tiny 源程序进行直接的词法分析(其实根本就称不上),不具有一般性(下面这个针对C++源程序的词法分析也相当单一,考虑面不足)。下面是我们的课程实验,需要结合课堂上学到的利用有限自动机DFA的方法来设计并分析源程序,提取出符合要求的Token。 根据老师给出的课件以及教材上的内容,扫描程序(词法分析)有下面3种实现方式,前面两篇(一、二)就是属于“直接编写”这一类,而本文则是“DFA”这一类。 1、按实验要求(如下),目前只拙劣地实现了第(1)和(5)点。

而且第(1)点中有两个要求未能完成: ★浮点数,因为包含单行、多行注释的DFA已经很混乱了,这部分暂时先不实现,考虑将来用“表驱动法”(即状态转换表)来实现。 ★注释,与教材类似不打印单行和多行注释,因此代码实现中少了处理注释的内容。 实验中用到的C++源程序与要求如下图:

2、对实验要求中的“样例程序”稍微修改了一下。 ★头文件 #include 被改为#include "iostream.h",即iostream.h 是由双引号"" 而不是尖括号< > 包围的,实际上回到了C 的代码规范。这样修改是因为原本确定DFA 时考虑不全面,忽略了“小于等于<=,大于等于>=,判断==,不等于!= ”这几种特殊情况,因为他们会跟< > = ! 这几个特殊字符造成二义性。 ★同时,C++ 中的IO 有“ >> 与<< ”也可能与上述特殊字符造成歧义,这个使得实现代码中的unGetNextChar(int step) 与教材中的有所不同,因为该函数带了一个“步长参数step”,其实也是为了迁就#include<iostream.h> 中的> 与代码中的>> 和>= 。 其实,"iostream.h"也被作为字符串识别了,目前尚改进不了。 ★另外为了测试算术运算符,对实验要求中的样例程序进行了修改,程序按照该样例作为输入,如下图加上了一个“i = i + 2;”语句: 3、程序中的打印输出模仿了教材中的样例输出。 ★对于以上样例输入,最终程序输出结果如下:

湖南大学计算理论引论期末试题2006年秋本科试卷a-答案

2006年秋《计算理论基础》本科生试卷 填空题 1、确定型有穷自动机的形式定义是一个5元组(Q,∑,δ,q0,F)其中: (1)Q为有穷状态集,(2)∑有穷字母表,(3)δ(q,a)是转移函数,它的第1个自变量为q∈Q,第二个自变量a∈∑,其结果δ(q,a)∈Q,即为Q×∑→Q的函数(映射),(4)q0为初始状态(一般只有一个),(5)F有一些接受状态(可以为多个。 2、非确定型有穷自动机N接受字符串w=b1b2…b m,是指存在状态序列r0,r1,…,r m,且满足:(1)r0=q0;(2)r i+1∈δ(r i,a i+1) (i=0,1,…,m-1),(3)r m∈F。 3、正则表达式的定义是:(1)a∈∑,空串ε,空集Φ均为合法的正则表达式,(2)若R1,R2是正则表达式,则(R1?R2)、R1?R2、R1*均是正则表达式。 4、将正则表达转换成自动机时,先建立单个字符的自动机,再用并、连、星号运算得到复杂正则表达的自动机,而将自动机转换为正则表达式时,需要先建立新开始状态与一个新接受态,在新开始状态与原开始状态之间连上空串边,在原来所有的接受状态与新接受状态间连空串边。 5、对于正则语言A的任意字符串s,当其长度≥p(泵长度)时,则一定存在满足|y|>0、|xy|≤p分解方式S=xyz,使得任意i≥0,xy i z∈A。这是正则语言的性质,基于此性质并利用反证法可证明一个语言不是正则语言,这时需要验证满足“|y|>0、|xy|≤p”的每种可能分解方式,都不满足“任意i≥0,xy i z∈A”。 6、非确定型下推自动机PDA接受w=w1w2…w m,是指存在状态序列r0,r1,…,r m,栈字字符串序列s0,s1,…,s m∈Γ*,满足:(1)r0=q0,s0=ε;(2)(r i+1,b)∈δ(r i,w i+1,a),其中s i=at(此时a 为栈顶元素),s i+1=bt(b为当前动作后的栈顶元素);(3)r m∈F,s m=ε。 7、Turing机特点:(1)可以从输送带中读出字符,也可以修改输入带中的字符;(2)可沿输入带向右移动直到遇到字符串结束标志为止,也可从右向左移动直到遇到左端标志为止;(3)可以边读写边移动读写头,也可以不读写而单纯移动;(4)如果进入了“接受”状态则停机(不必消耗所有字符),如果进入了“拒绝”状态也停机,否则一直运行,永不停机。 8、图灵机的形式定义是7元组(Q,∑,Γ,δ,q0,q accept,q reject),其中:(1)Q为状态集;(2)∑为输入字母表,不包括空白符号;(3)Γ为带字母表,包括∑与空格;(4)δ:Q?Γ→Q?Γ?{L,R},转换函数,第1个自变量的取值范围是Q,第2个自变量的取值范围是Γ,其值域是一个三元组,第一个分量表示下一个状态,第二个分量表示写入到输入带上的字符,第三个分量表示下一步的位置;(5)q0∈Q是初始状态;(6)q accept∈Q是接受状态;(7)q reject∈Q拒绝状态,且q reject≠q accept。 9、图灵机M接受字符串w,是指存在一系列的格局C1,C2,…,C k,使得:(1)C1是M 在输入w的起始格局,即C1=q0w;(2)每个C i确定地产生C i+1;(3)Ck是接受格局,即从起始格局起,经过有限步后可达到接受格局。 二、简述题 1、每个多带图灵机等价于某台单带图灵机。请参考下图陈述单带图灵机描述多带图灵机的的细节。多带图灵机为M,待的单带图灵机记为S。

无符号数的有穷自动机的实现

编译原理》无符号数的有穷自动机的实现(2007-12-04 15:07:27) package test; import java.io.*; public class Test1 { public static void main(String args[]){ InputStream input=System.in; InputStreamReader reader=new InputStreamReader(input); BufferedReader buf=new BufferedReader(reader); char num[]=new char[10]; String line=null; int i,flag; char ch1,ch2; while(true){ System.out.println("Please Input Number:"); try{ line=buf.readLine(); }catch(Exception e){ e.printStackTrace(); } if(line.equals("exit")){ System.out.println("退出"); break; } line=line+"$"; num=line.toCharArray(); i=0; flag=0; while(num[i]!='$'){ ch1=num[i]; ch2=num[i+1]; if(ch1>='0'&&ch1<='9'){ if((ch2>='0'&&ch2<='9') || ch2=='.' || ch2=='e' || ch2=='$'){ flag=1; } else flag=0; } if(ch1=='.'){

编译原理作业集-第三章-修订版

第三章词法分析 本章要点 1.词法分析器设计, 2.正规表达式与有限自动机, 3.词法分析器自动生成。 本章目标: 1.理解对词法分析器的任务,掌握词法分析器的设计; 2.掌握正规表达式与有限自动机; 3.掌握词法分析器的自动产生。 本章重点: 1.词法分析器的作用和接口,用高级语言编写词法分析器等内容,它们与词法分析器的实现有关。应重点掌握词法分析器的任务与设计,状态转换图等内容。 2.掌握下面涉及的一些概念,它们之间转换的技巧、方法或算法。 (1)非形式描述的语言?正规式 (2)正规式→ NFA(非确定的有限自动机) (3)NFA → DFA(确定的有限自动机) (4)DFA →最简DFA 本章难点 (1)非形式描述的语言?正规式 (2)正规式→ NFA(非确定的有限自动机) (3)NFA → DFA(确定的有限自动机) (4)DFA →最简DFA

作业题 一、单项选择题 (按照组卷方案,至少15道) 1. 程序语言下面的单词符号中,一般不需要超前搜索 a. 关键字 b. 标识符 c. 常数 d. 算符和界符 2. 在状态转换图的实现中,一般对应一个循环语句 a. 不含回路的分叉结点 b. 含回路的状态结点 c. 终态结点 d. 都不是 3. 用了表示字母,d表示数字, ={l,d},则定义标识符的正则表达式可以是:。 (a)ld*(b)ll*(c)l(l | d)*(d)ll* | d* 4. 正规表达式(ε|a|b)2表示的集合是 (a){ε,ab,ba,aa,bb} (b){ab,ba,aa,bb} (c){a,b,ab,aa,ba,bb} (d){ε,a,b,aa,bb,ab,ba} 5. 有限状态自动机可用五元组(V T,Q,δ,q0,Q f)来描述,设有一有限状态自动机M的定义如下: V T={0,1},Q={q0,q1,q2},Q f={q2},δ的定义为: δ(q0,0)=q1δ(q1,0)=q2 δ(q2,1)=q2δ(q2,0)=q2 M所对应的状态转换图为。

计算理论2013 12题

一.填空题 1.语言类P 、PSPACE 、NP 、NPSPACE 、EXPTIME 之间的关系为 (EXPTIME NPSPACE PSPACE NP P ?=??)。 2.产生语言{12n 03n |n ≥0}的上下文无关文法是(00011|A A ε→)。 3.命题“利用递归定理,一个TM M 可以得到自己的描述”是(正确的)。(正确的、错误的) 4.命题“A ≤M B 和B A M ≤含义相同”是(正确的)。(正确的、错误的) 5.上下文无关文法为乔姆斯基范式,是指其中的每一个规则具有如下形式(a A BC A →→,)。 6.萨维奇定理指出:对于任何函数 f:N →R +,其中f(n)≥n,( ))(())((2n f SPACE n f NSPACE ? ) 7.空间层次定理证明了空间复杂性类不全相同,它们形成一个层次结构,其中(时空界限较大的类比时空界限较小的类)包含更多的语言。 8.语言B 是NL 完全的,如果(1)NL B ∈并且(2)NL 中的每个A (对数空间)可规约到B ,例如(PATH )是NL 完全的。 9.如果一个最小化问题的近似算法总能找到不超过最优解k 倍的可行解,则称这个算法是(k-优)的。 10.根据概率错误,定义RP 是多项式时间概率图灵机识别的语言类,其中,不在语言中的输入以概率(1)被拒绝。 二.问答题 1.说明有穷自动机、正则表达式、下推自动机、图灵机的异同点。 2.对于图示的DFA M ,回答下列问题,并说明理由 (1)?0100,DFA A M >∈<是,DFA M 接受0100 (2)?011,DFA A M >∈<否,M 不接受011 (3)?DFA A M >∈<否,输入不完全,因此形式不正确 (4)?0100,REX A M >∈<否,前半部分不是 正则表达式,因此形式不正确 (5)?DFA E M >∈<否,M 的语言非空 (6)?,DFA EQ M M >∈<是,M 接受和它自身相同的语言 3.非确定性图灵机、概率图灵机和交错式图灵机是如何体现非确定性的? 三.构造题 1.构造PDA 。使其接受语言{0n 1n+1|n ≥0}。要求给出相应的形式描述和状态转移图。 2.构造一个可判定语言A={0n 1n 0n |n ≥0}的图灵机M ,并分析该图灵机算法的时间复杂性。 q 0 q 1 q 2 0 1 1 0,1

编译原理词法分析习题集带答案

《编译原理》习题(一)——词法分析 一、是非题(请在括号内,正确的划√,错误的划×) 1.编译程序是对高级语言程序的解释执行。(× ) 2.一个有限状态自动机中,有且仅有一个唯一的终态。(×) 9.两个正规集相等的必要条件是他们对应的正规式等价。(× ) 二、选择题 1.词法分析器的输出结果是_____。 A.( ) 记号 B.( ) 相应条目在符号表中的位置 C.( ) 记号和属性二元组D.( ) 属性值 2.正规式 M 1 和 M 2 等价是指_____。 A.( ) M1和M2的状态数相等 B.( ) M1和M2的有向边条数相等 C.( ) M1和M2所识别的语言集相等D.( ) M1和M2状态数和有向边条数相等3.语言是 A.句子的集合 B.产生式的集合 C.符号串的集合 D.句型的集合 4.编译程序前三个阶段完成的工作是 A.词法分析、语法分析和代码优化 B.代码生成、代码优化和词法分析 C.词法分析、语法分析、语义分析和中间代码生成 D.词法分析、语法分析和代码优化 5.扫描器所完成的任务是从字符串形式的源程序中识别出一个个具有独立含义的最小语法单位即 A.字符 B.单词 C.句子 D.句型 6.构造编译程序应掌握______。 A.( )源程序B.( ) 目标语言 C.( ) 编译方法D.( ) 以上三项都是 7.词法分析的任务是 A.识别单词 B.分析句子的含义 C.识别句子 D.生成目标代码 三、填空题 1.计算机执行用高级语言编写的程序主要有两种途径:___解释__和__编译___。 3.编译过程可分为(词法分析),(语法分析),(语义分析与中间代码生成),(优化)和(目标代码生成)五个阶段。 6.扫描器的任务是从(源程序中)中识别出一个个(单词符号)。 17.一张转换图只包含有限个状态,其中有一个被认为是(初)态;而且实际上至少要有一个(终)态。 1.编译程序首先要识别出源程序中每个(单词),然后再分析每个(句子)并翻译其意义。3.通常把编译过程分为分析前端与综合后端两大阶段。词法、语法和语义分析是对源程序的(分析),中间代码生成、代码优化与目标代码的生成则是对源程序的(综合)。 5.对编译程序而言,输入数据是(源程序),输出结果是(目标程序)。

计算理论知识点

1.如果一个语言被有穷自动机识别,则这个语 言是正则语言。 2.正则语言在并运算、连结、星号运算下封闭 3.每一台非确定有穷自动机都等价与一台确 定型有穷自动机。 4.一个语言是正则的当且仅当有一台非确定 型有穷自动机识别。 5.空集连接到任何集合上得到空集,空串连接 到任何一个串上不改变这个字符串。 6.一个语言是正则的,当且仅当有一个正则表 达式描述。 7.如果一个语言是正则的,则可以用正则表达 式描述它。 8.任何一个上下文无关语言都可以用乔姆斯 基范式的上下文无关文法产生。 9.一个语言是上下文无关的当且仅当存在一 台下推自动机识别它。 10.如果一个语言被下推自动机识别,则它是上 下文无关的。 11.每一个正则语言都是上下文无关的。 1.格局——图灵机计算过程中,当前状态、当 前带内容和读写头当前的位置组合在一起, 称为图灵机的格局。 2.图灵可识别(递归可枚举语言)——如果一 个语言可能被某一图灵机识别,则称该语言 是图灵可识别的。 3.图灵可判定(递归语言)——如果一个语言 能被某一图灵机判定,则称它是一个图灵可 判定的。 ——在输入上运行一个TM时,可能出现三种结果:接受、拒绝或者循环。这里循环仅仅指机器不停机,而不一定是这个词所指的那样,永远以同样的方式重复同样的步骤。 ——图灵机有两种方式不接受:一种是它进入拒绝状态而拒绝它,另一种是进入循环。 4.判定器——有时候很难区分进入循环还是 需要耗费很长时间的运行,因此,我们更喜 欢讨论所有输入都停机的图灵机,他们永远 不循环,这种机器称为判定器。他们总是能 决定接受还是拒绝,也称识别某个语言的判 定器判定该语言。 5.每一个可判定语言都是图灵可识别的。 6.每一个多带图灵机等价于一个单带图灵机。 7.非确定型图灵机都等价于一个确定型图灵 机。8.如果一个语言是图灵可识别的,当且仅当存 在非确定型图灵机识别它。 9.一个语言是图灵可判定的,当且仅当存在非 确定型图灵机判定它。 10.丘奇图灵论题——算法的明确定义。 11.详细描述图灵机的术语——①形式化描述, 详尽的写出图灵机的状态、转移函数,这是 最底层次的、最详细程度的描述。②描述水 平要高一些,称为实现描述,使用日常用语 来描述图灵机,没有给出状态和转移函数③ 高水平描述,他也是使用日常用语来描述算 法,忽略了实现模型不需要提及图灵机怎样 管理它的带子和读写头。 12.A DFA(确定型有穷自动机)、A NFA(非确定 型有穷自动机)、A REX(正则表达式)、 E DFA(判Φ的确定型有穷自动机)、EQ DFA(两 个判别同一个语言的DFA)、 A CFG(上下文无关文法)、ECFG(判Φ上下文 无关文法)、 A LBA(线性界限自动机)、是一个可判定语言 每一个上下文无关语言是可判定的。 A TM(图灵机)、停机问题、HALT TM(一个图 灵机对于给定的输入是否停机)、E TM(不接受任 何语言图灵机)、REGULAR TM(正则图灵机)、 EQ TM(接受串相等的图灵机)、 E LBA(不接受语言的线性界限自动机)、 ALL CFG、PCP(波斯地图对应实例)是不可判定 的。 A TM(补)是不可识别的。 13.一个语言的补是由不在此语言中的所有串 构成的语言。如果一个语言的补集是图灵可 识别的语言,则称它是补图灵可识别的。 14.一个语言是可判定的,当且仅当它既是图灵 可识别的,也是补图灵可识别的。 15.设M是一个图灵机,w是一个串。M在w 上的一个接受计算历史(accepting computation history)是一个格局序列C1、 C2、……、C l,其中C1是M在w上的起始 格局,C l是M的一个接受格局,且每个C i 都是C i-1的结果,即符合M规则。M在w 上的一个拒绝计算历史可类似定义。只是 C l是一个拒绝格局。 16.计算历史都是有限序列。如果M在w上永 不停机,则在M上既没有接受历史,也没 有拒绝计算历史存在。确定型机器在任何给 定的输入上最多只有一个计算历史。非确定 型机器即使在单个输入上都有多个计算历 史,他们与各个分支相对应。 17.线性有穷自动机是一种受到限制的图灵机, 它不允许其读写头离开包含输入带的区域。 如果此机器试图将它的读写头离开输入的 两个端点,则读写头就在原地保持不动。这 与普通的图灵机读写头不会离开带子的左 端点方式一样。 18.讲一个问题归约为另一个问题的概念可以 用多种方式来定义,选择哪种方式要根据具 体应用的情况。我们选择一种简单方式的可 归约性,叫做映射可归约性。 19.用映射可归约性把问题A归约为问题B指 的是:存在一个可计算函数,他将问题A 的实例转换成问题B的实例。如果有了这样 一个转换函数(称为归约),就能用B的解 决方案来解决A。 20.函数f:∑*→∑*是一个可计算函数,如果 有某个图灵机M,使得每个输入w上M停 机,且此时只有f(w)出现在带上。 21.语言A是映射可归约到语言B的,如果存在 可计算函数f:∑*→∑*使得对每个w w∈A<=>f(w)∈B 22.记做A≤mB,称作函数f为A到B的归约。 如果A≤mB且A是不可判定的,则B也是不 可判定的。 如果A≤mB且B是图灵可识别的,则A也是 图灵可识别的 23.EQ TM既不是图灵可识别的,也不是补图灵 可识别的。 24.令t:N→R+是一个函数,定义时间复杂 性类TIME(t(n))为由时间O(t(n))的图灵机可 判定的所有语言的集合。 25.t(n)是一个函数,t(n)≥n。则每一个多带图 灵机都和某一个O(t2(n))时间的单带图灵机 等价。 26.t(n)是一个函数,t(n)≥n。则每一个t(n)时间 的非确定型单带图灵机都与某一个2O(t(n))时 间的确定型单带图灵机等价。 27.P类是一个语言类,该类在多项式时间内可 判定。 28.PATH∈P、RELPRIME∈P、每一个上下文 无关文法都是P 29.一个语言在NP中,当且仅当它能被某个非 确定型多项式时间的图灵机判定。 30.{HAMPATH, CLQUE, SUBSET-SUM, SAT, 3SAT, UHAMPATH, }∈NP 31.P=成员可以快速判定的语言类 NP=成员可以快速验证的语言类 32.若存在多项式时间图灵机M,使得在任何输 入w上,M停机时f(w)恰好在带上,函数f: ∑*→∑*是一个多项式时间可计算函数。 33.语言A称作多项式时间映射可归约到语言 B,或者简称为多项式时间可归约到B,记 为A≤pB,若存在多项式时间可计算函数 f:∑*→∑*,对于每一个w,有 w∈A<=>f(w)∈B 函数f称为A到B的多项式时间归约。 34.列文-库克定理 SAT∈P,当且仅当P=NP 35.3SAT多项式时间可归约到CLIQUE。 36.令f:N→R+是一个函数。空间复杂性类和 NSPACE(f(n))定义如下: SPACE(f(n))={L|L是被O(f(n))空间的确定型 图灵机判定的语言} NSPACE(f(n))={L|L是被O(f(n))空间的非确定 型图灵机判定的语言} 37.萨维奇定理

计算理论习题解答

计算理论习题解答 练习 1.1图给出两台DFA M i和M2的状态图?回答下述有关问题? a. M 1的起始状态是q1 b. M1的接受状态集是{q2} c. M2的起始状态是q1 d. M2的接受状态集是{ q1, q4) e. 对输入aabb,M1经过的状态序列是q1, q2, q3, q1, q1 f. M 1接受字符串aabb吗?否 g. M 2接受字符串£吗?是 1.2给出练习 2.1中画出的机器M1和M2的形式描述 M 1=(Q 1,2,3 1,q1,F1)其中 1) Q1={q 1,q2,q3,}; 2) 2 ={a,b}; 3) 3 1 为: a b q1q2 q1 q2q3 q3 q3q2 q1 4) q1 5) F1={q 2} M2=(Q2,2,3 2,q2,F2)其中 1) Q2={q 1,q2,q3,q4}; 2) 2 ={a,b}; 3) 3 2为: a b q1q1 q2 q2q3 q4 q3q2 q1 q4q3 q4 3) q2是起始状态 4) F2={q 1,q4} 1.3 DFA M 的形式描述为({q1, q2, q3, q4, 机器的 q5}, {u,d}, 3 ,q3, {q3}),其中3在表2-3中给出。试画出此状态图。

1.6画出识别下述语言的DFA的状态图。 a){w | w从1开始以0结束} c) {w | w含有子串0101} 彳 c n 1 d) {w | w的长度不小于3,且第三个符号为0} 0,1

,1 g) {w | w 的长度不超过 5} 0,1 0,1 0,1 h){w | w i){w | w 的奇位置均为1} k) { 2} 斗「0,1 1 I) {w | w 含有偶数个0,或恰好两个1} 1 - 1 . 1 0 0 0 1 m)空集 _ 0,1 n)除空串外的所有字符串 1.7给出识别下述语言的 NFA ,且要求符合规定的状态数。

编译原理实验有穷自动机

#include #include #include using namespace std; #define max 100 struct edge{ string first;//边的初始结点 string change;//边的条件 string last;//边的终点 }; int N;//NFA的边数 vector value; //求状态集合I的&-闭包,用&代替“空“string closure(string a,edge *b) { inti,j; for(i=0;i

{ k=i; for(j=i+1;j>b[i].first; if(b[i].first=="#")break; else cin>>b[i].change>>b[i].last; } N=i; cout<<"请输入该NFA的初态及终态:"<>First>>Last; cout<<"请输入此NFA状态中的输入符号即边上的条件:"<>Change; T[x]=closure(First,b); T[x]=sort(T[x]); value.push_back(0); i=0; while(value[i]==0&&value.size()) { value[i]=1; for(j=0;j

第三章 有穷自动机

第三章有穷自动机 1、教学目的及要求: 本章介绍有关有穷自动机的基本概念和理论以及正规文法、正规表达式与有穷自动机之间的相互关系。要求掌握正则文法、状态转换图、DFA、NFA、正规式和正规集的基本概念。 2、教学内容: 本章介绍有关有穷自动机的基本概念和理论以及正规文法、正规表达式与有穷自动机之间的相互关系。 3、教学重点: 状态转换图。 4、教学难点: ◇正规式的定义-如何用作单词的描述工具 ◇有穷自动机的定义和分类-如何用作单词的识别系统 ◇正规式到有穷自动机的转换算法-词法分析程序的自动构造原理 ◇正则文法、正规集、DFA、NFA的相互转化。 5、课前思考 ◇什么是有穷自动机? ◇什么是状态转换图? 6、章节内容 第一节有穷自动机的形式定义 第二节 NFA到DFA的转换 第三节正规文法与有穷自动机 第四节正规表达式与FA 第五节 DFA在计算机中的表示

3.1 有穷自动机的形式定义 有穷状态自动机(Finite-state Automata 或简称FA)在识别功能上与正规文法类等价,而且也等价于一个特殊类型的语言产生器——正规表达式(Regular Expression)。因此许多简单的程序语言都可由FA所识别。事实上,它是描述词法的有效工具,也是进行词法分析的主要理论基础。 为了构造词法分析程序,要研究构词法,每种词类的结构模式以及识别它的数学模型——有穷自动机。它的模拟程序可以作为词法分析程序的控制程序。 有穷自动机(也称有限自动机)作为一种识别装置,它能准确地识别正规集,即识别正规文法所定义的语言和正规式所表示的集合,引入有穷自动机这个理论,正是为词法分析程序的自动构造寻找特殊的方法和工具。 有穷自动机分为两类:确定的有穷自动机(Deterministic Finite Automata)和不确定的有穷自动机(Nondeterministic Finite Automata) 。 一、确定有穷自动机的形式定义 一个确定的有穷自动机M(记作DFA M)是一个五元组M=(K,Σ,f,S,Z),其中(a) K是一个有限状态集合。 (b) Σ是一个字母表,它的每个元素称为一个输入字符。 (c) S∈K,S 称为初始状态,唯一。 (d) Z?K,Z称为终态集合, 终态也称可接受状态或结束状态。 (e) f是转换函数,是一个从K×Σ到K的单值映射。f(k i,a)=k j(k i,k j∈Q,a∈Σ)k j称为k i的一个后继状态。 确定性的体现:初始状态唯一;转换函数为单值映射。 例:设DFA M=({S,U,V,Q},{a,b},f,S,{Q})其中 f(S,a)=U,f(S,b)=V f(U,a)=Q,f(U,b)=V f(V,a)=U,f(V,b)=Q f(Q,a)=Q,f(Q,b)=Q 因为(1)初始状态唯一是S,(2)每个转换函数均为单值映射。所以该FA为确定有穷自动机。 二、状态转换表 DFA的映射关系可以由一个矩阵表示,矩阵的行标表示状态,列标表示输入字符,矩阵元素表示f(s,a)的值,这个矩阵称为状态转换表。 例:

无符号数的有穷自动机的实现

内蒙古工业大学信息工程学院 实验报告 课程名称: _____编译原理 _____ _ 实验名称:无符号数的有穷自动机的实现 实验类型:验证性□ 综合性□ 设计性□ 实验室名称:电力大楼九楼东 班级:计12-1班学号: 201220201006 姓名:初旭组别: 同组人:成绩: 实验日期: 2015年6月2日

实验一无符号数的有穷自动机的实现 (一)实验目的 无符号数的有穷自动机的实现目的是使学生掌握文法的形式描述,穷自动机的概念。将文法转换成有穷自动机的方法,理解出错处理程序思想,如何用状态矩阵实现一个穷自动机的机内表示。 (二)实验内容 1.无符号数的BNF描述 (0)<无符号数> → d <余留无符号数> | .<十进制数> | e <指数部分> (1)<余留无符号数>→d <余留无符号数>|.<十进制数> | e <指数部分>|ε(2)<十进制小数> → d <余留十进制小数> (3)<余留十进制小数> e <指数部分> | d <余留十进制小数> | ε (4)<指数部分> → d <余留整指数> | + <整指数> | - <整指数> (5)<整指数> → d <余留整指数> (6)<余留整指数> → d <余留整指数> | ε 2.将G[<无符号数>]文法转换成有穷自动机。 3.构造状态矩阵;将有穷自动机的状S 1S 2 ……S n 及输入的字a 1 a 2 ……a m 构 成一个n*m的矩阵。 4.用状态矩阵设计出一个词法分析程序。 5.扫描无符号数,根据文法给出无符号数出错的位置。 (三)实验原理 1)无符号数的文法描述如下: 0.<无符号数> → d <余留无符号数> | . <十进制数> | e <指数部分> 1.<余留无符号数> → d <余留无符号数> | . <十进制数> | e <指数部分> | ε 2.<十进制小数> → d <余留十进制小数> 3.<余留十进制小数> e <指数部分> | d <余留十进制小数> | ε

编译原理作业集-第三章-修订版

编译原理作业集-第三章-修 订版 -标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII

第三章词法分析 本章要点 1.词法分析器设计, 2.正规表达式与有限自动机, 3.词法分析器自动生成。 本章目标: 1.理解对词法分析器的任务,掌握词法分析器的设计; 2.掌握正规表达式与有限自动机; 3.掌握词法分析器的自动产生。 本章重点: 1.词法分析器的作用和接口,用高级语言编写词法分析器等内容,它们与词法分析器的实现有关。应重点掌握词法分析器的任务与设计,状态转换图等内容。 2.掌握下面涉及的一些概念,它们之间转换的技巧、方法或算法。 (1)非形式描述的语言正规式 (2)正规式 NFA(非确定的有限自动机) (3)NFA DFA(确定的有限自动机) (4)DFA 最简DFA 本章难点 (1)非形式描述的语言正规式 (2)正规式 NFA(非确定的有限自动机) (3) NFA DFA(确定的有限自动机) (4) DFA 最简DFA

作业题 一、单项选择题 (按照组卷方案,至少15道) 1. 程序语言下面的单词符号中,一般不需要超前搜索 a. 关键字 b. 标识符 c. 常数 d. 算符和界符 2. 在状态转换图的实现中,一般对应一个循环语句 a. 不含回路的分叉结点 b. 含回路的状态结点 c. 终态结点 d. 都不是 3. 用了表示字母,d表示数字, ={l,d},则定义标识符的正则表达式可以是:。 (a)ld* (b)ll* (c)l(l | d)* (d)ll* | d* 4. 正规表达式(ε|a|b)2表示的集合是 (a){ε,ab,ba,aa,bb} (b){ab,ba,aa,bb} (c){a,b,ab,aa,ba,bb} (d){ε,a,b,aa,bb,ab,ba} 5. 有限状态自动机可用五元组(V T,Q,δ,q0,Q f)来描述,设有一有限状态自动机M的定义如下: V T={0, 1},Q={q0, q1, q2},Q f={q2},δ的定义为: δ(q0,0)=q1δ(q1,0)=q2 δ(q2,1)=q2δ(q2,0)=q2

词法分析器的设计

学生实验报告册2017 ——2018 学年第1学期 学院:信息与电气工程学院 专业:计算机科学与技术 姓名:李金 学号:195140046 班级:计算机2班

实验一词法分析器的设计 一、实验目的 1、通过设计编制一个调试一个具体的此法分析程序,理解词 法分析在编译程序中的作用。 2、加深对有穷自动机模型的理解。 3、掌握词法分析程序的实现方法和要求。 4、用C语言,对一个简单语言的子集编制一个一遍扫描的 程序,以加深对编译原理的理解,掌握编译程序的实现方 法和技术。 编制一个读单词过程,从输入的源程序中,识别出 各个具有独立意义的单词,即基本保留字、标识符、 常数、运算符、分隔符五大类,并依次输出各个单 词的内部编码及单词符号自身值(遇到错误时课显 示“Error”,然后跳过错误部分继续显示) 一、程序要求 程序输入/输出示例 如源程序为C语言,输入如下一段: Main() { int a,b; a = 10; b = a + 20;

} 要求输出如下图 (2,main) (4,=) (5,() (3,10) (5,)) (5,;) (5,{) (2,b) (1,int) (4,=) (2,a) (2,a) (5,,) (4,+) (2,b) (3,20) (5,;) (5,;) (2,a) (5,}) 要求: 1、识别保留字:if,int,for,while,do,return,break,continue; 单 词识别码为1; 2、其他的都识别为标识符;单词识别码为2; 3、常数为无符号整数;单词识别码为3; 4、运算符包括:+,-,*,/,=,<,<=,!=;单词识别码为4; 5、分隔符包括:,、;、{、}、(、);单词识别码为5; 二、实验步骤 1、定义部分:定义常亮、变量、数据结构。 2、初始化:从文件源程序全部输入到字符缓冲区中。

相关文档
相关文档 最新文档