词法分析与有穷自动机

词法分析与有穷自动机
词法分析与有穷自动机

词法分析与有穷自动机

1. 将图1所示的有穷自动机转换成与其等价的正规文法,其中4、5为终止状态。 解答:本题考查有穷自动机到正规文法的转换方法。

这类题只需要书中所介绍的方法进行即可得到正规文法,本题有穷自动机对应的正规文法G[S]为:

A →aB|bB|cC

B →aB|bD|aE|cC|b|a

C →bB|cC|cE|c

D →bD|b

E →aE|a

图1有穷自动机的状态转换图

2.给定如图2所示的有穷自动机,试用正规表达式给出它能接受的语言集合。

图2有穷自动机

解:本题考查正规表达式与有穷自动机的等价性。

对于一个在输入字母表∑上的FAM ,一定可以在字母表∑上构造一个正规表达式e ,使得L(e)=L(M) .

根据状态转换图,从开始状态出发,可以有任意个(包括0个)b 作为句子的开始部分;

start

a

b

从0状态出发,每输入一个a,不许输入两个b才能到达终止状态后,还可以通过输入a回到状态1,或输入b回到状态0,然后进入递归过程,再输入相同的符号串,所以,该有穷自动机描述的语言为:

(b*(aa*b)*b)*

3. 构造下述正规表达式的DFA。

Xy*|yx*y|xyx

解:本题考查由正规表达式构造有穷自动机的方法,

本题可按照由正规表达式构造等价的NFA,NFA确定化,DFA最小化3步进行求解。

(1)根据题中所给的正规表达式得到相应的DFA如图3所示。

图3正规表达式Xy*|yx*y|xyx的DFA。

(2)依据该NFA采用子集法构造确定DFA其过程如表1(已换名)所示。

以所有包含NFA的终止状态Z的DFA状态作为终止状态,得到DFA相应的状态转换图如图4所示

图4 DFA的状态转换图

(3)对DFA进行最小化,过程如下:

已知K={0,1,2,3,4,5,6}。首先将K分成两个子集

K1={0,2,3} (非终态集)

K2={1,3,4,6} (终态集)

在状态集合K1={0,2,3}中,因为

{0}x={1}?K2

{2,4}x={4}?K1

所以状态0与状态2,4不等价,故K1可分割为

K11={0} K12={2,4}

在状态集合K12={2,4}中,因为有

{2,4}x={4} {2,4}y={5}?K2

所以,状态2和状态4等价。

在状态集合K2={1,3,4,6}中,状态5无输入,状态3有x、y输入,状态1与状态6只有y输入,所以可将K2分割为

K21={1,6} K22={3} K23={5}

在状态集合K21={1,6}中,状态1输入y到达状态3,状态6输入y到达状态6,所以状态1与6也不等价。进一步将K21分割为

K211={1} K212={6}

于是,将原状态集合划分为:{0}、{2,4}、{1}、{3}、{5}、{6}。

选{2,4}中的2作为代表,原来由状态4导入(出)其余状态的弧改为有状态2导入(出);然后消去状态4。最后得到最小化后的状态转化图如图5所示。

图5正规表达式Xy*|yx*y|xyx的最小化DFA

4. 构造正规表达式(011)*00相应的DFA。

解:本题考查由正规表达式构造确定的有穷自动机的方法。

(1)构造正规表达式(011)*00的DFA。

按照图3.2所示的转换规则构造正规表达式(011)*00对应的NFA如图6所示。

图6正规表达式(011)*00的DFA

(2)由正规表达式(011)*00的NFA构造确定的有穷自动机DFA。

以NFA的开始状态S的ε闭包ε-CLOSURE({S})作为DFA的开始状态,采用子集法将图3.43中所式的NFA确定化,其过程如表2所示。

名)如图7所示。

图7 正规表达式(0|1)*00的DFA

(3)对该DFA进行最小化。

采用够造状态集划分的方法对DFA进行最小化,过程如下:以知K={0,1,2,3}。首先将K分成两个子集

K1={0,1,2} (非终态集)

K2={3} (终态集)

在K1={0,1,2}中,有

00=1∈K110=3∈K2 20=1∈K1

01=2∈K111=2∈K121=2∈K1

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

计算理论 字母表:一个有穷的符号集合。 字母表上的字符串是该字母表中的符号的有穷序列。 一个字符串的长度是它作为序列的长度。 连接反转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),另外,还有一个程序对这个盒子进行控制。这个装置就是根据程序的命令以及它的内部状态进行磁带的读写、移动。工作带被划分为大小相同的方格,每一格上可书写一个给定字母表上的符号。控制器可以在带上左右移动,它带有一个读写出一个你期待的结果。这一理论奠定了整个 现 代计算机的理论基础。“图灵机”更在电脑史上与“冯·诺依曼机”齐名,被永远载

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

编译原理课程设计设计题目:有限自动机的运行 年级:计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} };

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

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

不确定有穷状态自动机的确定化实验报告

编译原理实验报告(二) E01214055 鲁庆河 1.实验名称: 不确定有穷状态自动机的确定化 2.实验目的: a)输入:非确定有穷状态自动机NFA b)输出:确定化的有穷状态自动机DFA 3.实验原理: a)NFA确定化为DFA 同一个字符串α可以由多条通路产生,而在实际应用中,作为描述控制过程的自动机,通常都是确定有限自动机DFA,因此这就需要将不确定有限自动机转换成等价的确定有限自动机,这个过程称为不确定有限自动机的确定化,即NFA确定化为DFA。 b)NFA的确定化算法 ----- 子集法: ●若NFA的全部初态为S1,S2,…,S n,则令DFA的初态为: S=[S1,S2,…,S n],其中方括号用来表示若干个状态构成的某一状态。 ●设DFA的状态集K中有一状态为[S i,S i+1,…,S j],若对某符号a∈∑,在NFA中有F({ S i,S i+1,…,S j},a) ={ S i’,S i+1’,…,S k’ },则令F({ S i,S i+1,…,S j },a)={ S i’,S i+1’,…,S k’ }为DFA的一个转换函数。 若[ S i’,S i+1’,…,S k‘ ]不在K中,则将其作为新的状态加入到K中。 ●重复第2步,直到K中不再有新的状态加入为止。 ●上面得到的所有状态构成DFA的状态集K,转换函数构成DFA的F,DFA的字母表仍然是NFA的字母表∑。 ●DFA中凡是含有NFA终态的状态都是DFA的终态。 c)closure(I)函数,move(I,a)函数的 假设I是NFA M状态集K的一个子集(即I∈K),则定义ε-closure(I)为: 1.若Q∈I,则Q∈ε-closure(I); 2.若Q∈I,则从Q出发经过任意条ε弧而能到达的任何状态Q’,则Q’∈closure(I)。 3.状态集ε-closure(I)称为状态I的ε闭包。 假设NFA M=( K,∑,F,S,Z ),若I∈K,a∈∑,则定义I a=closure(J),其中J是所有从closure(I)出发,经过一条a弧而到达的状态集。 NFA确定化的实质是以原有状态集上的子集作为DFA上的一个状态,将原状态间的转换为该子集间的转换,从而把不确定有限自动机确定化。经过确定化后,状态数可能增加,而且可能出现一些等价状态,这时就需要简化。 4.实验思路:(数据结构及变量设计等)

编译原理-第三版-何炎祥-第三章习题答案

编译原理作业三 T3-1构造自动机A ,使得它能识别形式如±dd*·d*E ±dd 的实数,其中,d ∈{0,1,2,3,4,5,6,7,8,9} T3-4将图所示NFA 确定化和最小化。 解:依据该NFSA 的状态图构造DFSA 如下表所示。 I I x I y [q 0] 0 [q 1] 1 [q 2] 2 [q 1] 1 [q 2,q 3] 3 [q 2] 2 [q 1,q 3] 4 [q 2,q 3] 3 [q 3,q 4] 5 [q 1,q 3] 4 [q 1,q 3] 4 [q 2,q 3,q 4] 6 [q 3] 7 [q 3,q 4] 5 [q 3,q 4] 5 [q 3] 7 [q 2,q 3,q 4] 6 [q 3,q 4] 5 [q 1,q 3] 4 [q 3] 7 [q 3,q 4] 5 [q 3] 7 DFSA 相应的状态图如下图所示: 6 1 2 3 4 5 7 X X y y y X X X X X y y y y S 3 1 4 2 5 6 7 ± d E d d d d ±

对DFSA 进行最小化: 已知K={0,1,2,3,4,5,6,7},K 可分为两个子集 K1={0,1,2,3,4,7}(非终态集) K2={5,6}(终态集) 在K1中,因为状态1只有x 输入,状态2只有y 输入,其他状态均有x ,y 输入,所以可以将K1分割为K11={0,3,4,7} K12={1} K13={2} 在K11中 {0}x=1∈K12 {3,4,7}x={5,6}?K2 故可将K11分割为 K111={0} K111={3,4,7} {3,4,7}x={5,6}?K2 {3,4,7}y={4,7}?K111 因此状态3,4,7是否等价取决于对K2的划分结果 在状态K2={5,6}中 {5,6}x=5∈K2 {5,6}y={4,7}?K111 所以状态5,6等价,所以状态3,4,7等价 所以,将原状态集合划分为{0}、{3,4,7}、{1}、{2}、{5,6} 最小化后的状态图为: S 1 2 3 5 X X X X y y y y

设计有穷自动机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、程序中的打印输出模仿了教材中的样例输出。 ★对于以上样例输入,最终程序输出结果如下:

有限自动机三章答案

第三章 ******************************************************* ************************ 1.构造下列语言的DFA ( 陶文婧 02282085 ) (1){0,1}* ,1 (2){0,1}+ ,1 (3){x|x{0,1}+且x中不含00的串} (设置一个陷阱状态,一旦发现有00的子串,就进入陷阱状态) (4){ x|x{0,1}*且x中不含00的串} (可接受空字符串,所以初始状态也是接受状态) (5){x|x{0,1}+且x中含形如10110的子串} (6){x|x{0,1}+且x中不含形如10110的子串} (设置一个陷阱状态,一旦发现有00的子串,就进入陷阱状态)

(7){x|x{0,1}+且当把x看成二进制时,x模5和3同余,要求当x为0时,|x|=1,且x0时,x的首字符为1 } 1.以0开头的串不被接受,故设置陷阱状态,当DFA在启动状态读入的符号为0,则进 入陷阱状态 2.设置7个状态:开始状态q s,q0:除以5余0的等价类,q1:除以5余1的等价类,q2:除以5 余2的等价类,q3:除以5余3的等价类,q4:除以5余4的等价类,接受状态q t (8){x|x{0,1}+且x的第十个字符为1} (设置一个陷阱状态,一旦发现x的第十个字符为0,进入陷阱状态) (9){x|x{0,1}+且x以0开头以1结尾} (设置陷阱状态,当第一个字符为1时,进入陷阱状态)

(10){x|x{0,1}+且x中至少含有两个1} (11){x|x {0,1}+且如果x以1结尾,则它的长度为偶数;如果x以0结尾,则它的长度为奇数} 可将{0,1}+的字符串分为4个等价类。 q0:[]的等价类,对应的状态为终止状态 q1:x的长度为奇且以0结尾的等价类 q2:x的长度为奇且以1结尾的等价类 q3: x的长度为偶且以0结尾的等价类 q4: x的长度为偶且以1结尾的等价类 (12){x|x是十进制非负数}

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

第三章词法分析 本章要点 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所对应的状态转换图为。

湖南大学计算理论引论期末试题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=='.'){

形式语言与自动机课后习题答案

形式语言与自动机课后作业答案 第二章 4.找出右线性文法,能构成长度为1至5个字符且以字母为首的字符串。 答:G={N,T,P,S} 其中N={S,A,B,C,D} T={x,y} 其中x∈{所有字母} y∈{所有的字符} P如下: S→x S→xA A→y A→yB B→y B→yC C→y C→yD D→y 6.构造上下文无关文法能够产生 L={ω/ω∈{a,b}*且ω中a的个数是b的两倍} 答:G={N,T,P,S} 其中N={S} T={a,b} P如下: S→aab S→aba S→baa S→aabS S→aaSb S→aSab S→Saab S→abaS S→abSa S→aSba S→Saba S→baaS S→baSa S→bSaa S→Sbaa 7.找出由下列各组生成式产生的语言(起始符为S) (1)S→SaS S→b (2)S→aSb S→c (3)S→a S→aE E→aS 答:(1)b(ab)n /n≥0}或者L={(ba)n b/n≥0} (2) L={a n cb n /n≥0} (3)L={a2n+1 /n≥0} 第三章 1.下列集合是否为正则集,若是正则集写出其正则式。 (1)含有偶数个a和奇数个b的{a,b}*上的字符串集合 (2)含有相同个数a和b的字符串集合 (3)不含子串aba的{a,b}*上的字符串集合 答:(1)是正则集,自动机如下 (2) 不是正则集,用泵浦引理可以证明,具体见17题(2)。

(3) 是正则集 先看L’为包含子串aba的{a,b}*上的字符串集合 显然这是正则集,可以写出表达式和画出自动机。(略) 则不包含子串aba的{a,b}*上的字符串集合L是L’的非。 根据正则集的性质,L也是正则集。 4.对下列文法的生成式,找出其正则式 (1)G=({S,A,B,C,D},{a,b,c,d},P,S),生成式P如下: S→aA S→B A→abS A→bB B→b B→cC C→D D→bB D→d (2)G=({S,A,B,C,D},{a,b,c,d},P,S),生成式P如下: S→aA S→B A→cC A→bB B→bB B→a C→D C→abB D→d 答:(1) 由生成式得: S=aA+B ① A=abS+bB ② B=b+cC ③ C=D ④ D=d+bB ⑤ ③④⑤式化简消去CD,得到B=b+c(d+bB) 即B=cbB+cd+b =>B=(cb)*(cd+b) ⑥ 将②⑥代入① S=aabS+ab(cb)*(cd+b)+(cb)*(cd+b) =>S=(aab)*(ab+ε)(cb)*(cd+b) (2) 由生成式得: S=aA+B ① A=bB+cC ② B=a+bB ③ C=D+abB ④ D=dB ⑤ 由③得 B=b*a ⑥ 将⑤⑥代入④ C=d+abb*a=d+ab+a ⑦ 将⑥⑦代入② A=b+a+c(d+b+a) ⑧ 将⑥⑧代入① S=a(b+a+c(d+ab+a))+b*a =ab+a+acd+acab+a+b*a 5.为下列正则集,构造右线性文法: (1){a,b}* (2)以abb结尾的由a和b组成的所有字符串的集合

编译原理实验 无符号数的有穷自动机的实现

实验二 无符号数的有穷自动机的实现 学时数:4 [实验内容]: 无符号数的有穷自动机的实现。利用状态表和有限自动机的运行原理编制程序,使得程序能够识别一个输入串是否为一个无符号定点实数。 [实验目的]: 1、理解有限自动机的作用;进一步理解自动机理论。 1、 用状态图和状态表表示有限自动机; 3、以程序实现有限自动机的运行过程;掌握文法转换成自动机的技术及有穷自动机实现的方法。 [实验要求]: 1、 设计要求:利用状态图或状态表相关理论,利用有限自动机理论。 2、 功能要求:输入一个单行无空格的字符串(以“#”号结束),如果该字符串是一个合法的输入,则显示“接受”,否则显示“不接受”。 3、 输入/输出示例(以无符号定点实数为例):(1)输入:“3.14”,输出:“接受”;(2)输入:“3.1.4”,输出:“不接受”;(3)输入:“3ab ”,输出:“不接受”。 [实验提示]: 1、无符号数的BNF 描述如下: 0.<无符号数> → d <余留无符号数> | . <十进制数> | e <指数部分> 1.<余留无符号数> → d <余留无符号数> | . <十进制数> | e <指数部分> | ε 2.<十进制小数> → d <余留十进制小数> 3.<余留十进制小数> e <指数部分> | d <余留十进制小数> | ε 4.<指数部分> → d <余留整指数数> | + <整指数> | - <整指数> 5.<整指数> → d <余留整指数数> 6.<余留整指数数> → d <余留整指数数> | ε 2、将G[<无符号数>]文法转换成有穷自动机见图1。 图1 3、构造状态矩阵;将有穷自动机的状S 1 S 2 ……S n 及输入的字a 1 a 2 ……a m 构成一个 n*m 的矩阵。 1)根据状态矩阵设计出一个词法分析程序识别无符号数。 2)扫描无符号数,根据文法给出无符号数出错的位置。 [实验报告]: 1、写出无符号数词法分析的思想。

计算理论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

编译原理 第3章习题解答

第三章习题参考解答 3.1 构造自动机A,使得 ① ② ③当从左至右读入二进制数时,它能识别出读入的奇数; ④它识别字母表{a, b}上的符号串,但符号串不能含两个相邻的a,也不含两个相邻的b; ⑤它能接受字母表{0, 1}上的符号串,这些符号串由任意的1、0和随后的任意的11、00对组成。 ⑥它能识别形式如 ±dd*? d*E ±dd 的实数,其中,d∈{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}。 3.2 构造下列正规表达式的DFSA: ① xy*∣yx*y∣xyx; ② 00∣(01)*∣11; ③ 01((10∣01)*(11∣00))*01; ④ a(ab*∣ba*)*b。 3.3 消除图3.24所示自动机的空移。 b ε q 1 q 2 q 3 a b a,b q a q 6 q 4 q 5 a b ε ε ε 图3.24 含空移的自动机 3.4 将图3.25所示NDFSA确定化和最小化。 x y q q 1 q 2 q 4 q 3 x y x y x,y x 图3.25 待确定化的NDFSA

3.5 设e、e1、e2是字母表∑上的正规表达式,试证明 ① e∣e=e;② {{e}}={e};③ {e}=ε∣e{e};④ {e1 e2} e1= e1{e2 e1}; ⑤ {e1∣e2}={{e1}{e2}}={{e1}∣{e2}}。 3.6 构造下面文法G[Z]的自动机,指明该自动机是不是确定的,并写出它相应的语言: G[Z]: Z→A0 A→A0∣Z1∣0 3.7 设NDFSA M=({x, y},{a, b},f, x, {y}), 其中,f(x, a)={x, y}, f(x, b)={y}, f(y, a)=?, f(y, b)={x, y}。试对此NDFSA确定化。 3.8 设文法G[〈单词〉]: 〈单词〉→〈标识符〉∣〈无符号整数〉 〈标识符〉→〈字母〉∣〈标识符〉〈字母〉∣〈标识符〉〈数字〉 〈无符号整数〉→〈数字〉∣〈无符号整数〉〈数字〉 〈字母〉→a∣b 〈数字〉→1∣2 试写出相应的有限自动机和状态图。 3.9 图3.29所示的是一个NDFSA A,试构造一个正规文法G,使得L(G)= L(A)。 A B b S a a,b C a D b 图3.29 FSA A 3.10 构造一个DFSA,它接受∑={a, b}上的符号串,符号串中的每一个b都有a直接跟在右边;然后,再构造该语言的正规文法。 参考答案 3.1 解 (1) (2) (3) 依题意,当二进制数的末尾为1时,表示此二进制数为奇数。因此自动机接收由0、1构成的一个二进制串,且串的最后一位必为1(特殊情况下,接收数字1)。构造的自动机如下: z S 1 0,1

计算理论知识点

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 ,且要求符合规定的状态数。

相关文档
最新文档