`

【编译原理】正则表达式

 
阅读更多

08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活。此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xiaowei_cqu/article/details/7747205

 

《编译原理》第三章习题

我们的教材是那本经典的“龙书”:《Compiler: Principles, Techniques, and Tools》

灰常灰常喜欢小监老师的课,就是做作业的记忆太痛苦了。。。

3.3.2 试描述下列正则表达式定义的语言


1) a(a|b)*a
以a开头且以a结尾,中间由零个或多个a或b的实例构成的串
2) ((ε|a)b*)*
零个或多个a或b的实例构成的串
3)(a|b)*a(a|b)(a|b)
三个或多个a或b的实例构成的串,且倒数第三个实例一定为a。
4)a*ba*ba*ba*
零个或多个a的实例,三个b的实例构成的串。
!!5)(aa|bb)*((ab|ba)(aa|bb)*(ab|ba)(aa|bb)*)*
零个或偶数个a的实例,相同个数的b的实例构成的串

3.3.5


3) Comments, consisting of a string surround by /* and */, without an intervening*/, unless it is inside double-quotes (")
(\/\*) (.*^(\/\*)) (“(.*)”|ε) (.*^(\/\*)) (\*\/)

3.4.1 给出识别练习3.3.2中各个正则表达式所描述的语言的状态转换图


1) a(a|b)*a

2) ((ε|a)b*)*

3)(a|b)*a(a|b)(a|b)

4)a*ba*ba*ba*

!!5)(aa|bb)*((ab|ba)(aa|bb)*(ab|ba)(aa|bb)*)*


3.6.2 为练习3.3.5中的每一个语言设计一个DFA或NFA


Comments, consisting of a string surround by /* and */, without an intervening*/, unless it is inside double-quotes (")
设计NFA如下:

(感觉这个有些问题,不知道^可不可以用作转移条件。。。。)

3.6.5 给出如下练习中的NFA的转换表


1)练习3.6.3

2)练习3.6.4

3)图 2-6


3.7.1 将下列图中的NFA转换为DFA


1)图3-26

2)图3-29


3)图3-30



3.7.3 用算法3.23和3.20将正则表达式转换为DFA


1) (a|b)*
由算法3.23得到NFA:

由算法3.20得到DFA:

2) (a*|b*)*
由算法3.23得到NFA:

由算法3.20得到DFA:

3) ((ε|a)b*)*
由算法3.23得到NFA:

由算法3.20得到DFA:

此处可以看到 1) 2) 3)表示的语义是等价的,NFA可以有多种表示形式,但DFA是唯一的
4)(a|b)*abb(a|b)*
由算法3.23得到NFA:

由算法3.20得到DFA:


转载请注明出处:http://blog.csdn.net/xiaowei_cqu/article/details/7764967



分享到:
评论

相关推荐

    编译原理正则表达式转NFA转DFA DFA最小化 Cpp代码

    编译原理课的大作业 包含三个小实验 在一个cpp文件里 正则表达式转换为nfa nfa转换为dfa dfa最小化 个人原创代码

    编译原理正则表达式的相关应用

    大学课程中编译原理课程的正则表达式章节中关于正则表达式的理解和应用,使用Java GUI进行编写,主要包括了各种主要的正则匹配和正则使用

    编译原理正则表达式匹配网址

    Java 程序设计: 为 UnLinker.java 文件中的 UnLinker 类实现成员函数 String clean(String text)。 函数 clean 的功能是:屏蔽字符串参数 text 中的网页链接信息,并返回屏蔽后的结果; 如果无需屏蔽,则返回原来的...

    vb正则表达式实例(正则表达式测试程序)

    这个“vb正则表达式实例”很可能是为了帮助开发者测试和理解正则表达式的工作原理而设计的一个应用程序。下面将详细探讨正则表达式的基本概念、在VB.NET中的应用以及如何使用它们进行文本匹配。 1. 正则表达式基础 ...

    正则表达式转为NFA

    总的来说,正则表达式到NFA的转换是理论计算机科学和编译原理中的核心概念,它在解析和处理文本数据时发挥着至关重要的作用。理解和掌握这一转换方法对于理解正则表达式的内部工作机制至关重要。在实际编程中,如...

    正则表达式转NFA

    课程设计 正规式构造nfa.这是编译原理的一个实验, 是把一个正则表达式转化为不确定有穷自动机NFA的算法程序,朋兴趣的朋友可以下载来看看哦。

    正则表达式到NFA

    在计算机科学领域,尤其是编译原理中,正则表达式常常被转化为非确定性有限自动机(NFA)来实现其匹配功能。 非确定性有限自动机(NFA)是一种状态机,用于识别正则表达式描述的语言。与确定性有限自动机(DFA)...

    正则表达式学习资料以及练习项目代码很多

    - **正则表达式在其他语言中的差异**:虽然正则表达式原理相似,但不同编程语言中的实现可能存在细微差别。 7. **学习资源** - **文档**:Python官方文档中的`re`模块介绍,以及其他专门的正则表达式教程。 - **...

    正则表达式 到 NFA

    这是编译原理的一个实验, 是把一个正则表达式转化为不确定有穷自动机NFA的算法程序,朋兴趣的朋友可以下载来看看哦. 一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式...

    正则表达式转NFA实现

    总的来说,正则表达式转NFA的实现是理论与实践的结合,它涉及编译原理、形式语言和自动机理论等领域的知识,对于理解和处理字符串模式匹配问题具有深远的意义。在实际应用中,这一转换过程常被用于文本分析、搜索...

    正则表达式(regex)C语言源码,超强查找/替换算法

    通过编译和运行`test.c`,开发者可以检查库的正确性,理解其工作原理,并学习如何在自己的项目中使用这些函数。 **4. JRegex.h** `JRegex.h`是头文件,包含了对外部使用的函数声明。这些函数可能包括初始化正则...

    构造正则表达式的简化DFA算法

    构造正则表达式的简化DFA算法论文 介绍了构造等价于给定正则表达式的简化确定有限自动机(DFA) 的算 法. 方法是首先构造与正则表达式等价的非确定有限自动机(NFA) , 这里省略了构 造带E动作的有限自动机的操作, 然后...

    正则表达式实时测试工具(源码)

    你可以根据自己的需求定制工具,或者研究其内部实现以深入理解正则表达式的工作原理。 在使用正则表达式实时测试工具时,开发者可以遵循以下步骤: 1. 理解正则表达式的基础概念,如字符类(如\d表示数字,\w表示...

    正则表达式 到 nfa dfa

    总结来说,正则表达式、NFA和DFA是理论计算机科学和软件工程中的基础概念,它们在文本处理、语言设计和编译技术中扮演着核心角色。理解和掌握这些概念有助于开发者编写出更高效、更准确的文本处理程序。

    编译原理--正则表达式文档

    在编译原理中,正则表达式是构建词法分析器(Scanner 或 Lexer)的关键概念,它能简洁地描述语言中的词汇结构。 1. **基本符号与操作** - **字符类**: 例如 `[abc]` 表示匹配 'a'、'b' 或 'c' 中的任意一个字符。 ...

    正则表达式到dfa.rar

    学习正则表达式到DFA的转换对于理解正则表达式的内部机制非常重要,这有助于编写更高效的文本处理程序,并为计算机科学中的编译原理、形式语言理论等领域打下坚实基础。在实际应用中,理解这种转换可以帮助我们更好...

    详解正则表达式Matcher类中group方法

    Pattern类用于编译正则表达式模式,而Matcher类则用于对输入字符串进行模式匹配。 Matcher类的group方法是正则表达式中非常关键的一个方法,它用于提取匹配正则表达式的特定分组内容。在正则表达式中,可以通过括号...

    delphi正则表达式包

    7. **正则表达式调试**:为了帮助调试复杂的正则表达式,TPerlRegEx组件通常提供了`RegexInfo`方法,它可以生成关于正则表达式的解释信息,帮助理解其内部工作原理。 8. **性能优化**:虽然正则表达式强大,但过度...

    java使用正则表达式判断手机号的方法示例

    java使用正则表达式判断手机号的方法示例文章主要介绍了java使用正则表达式判断手机号的方法,分析了手机号码段的原理及java使用正则表达式针对手机号的匹配操作实现技巧。下面是文章中提到的知识点: 1. 手机号码...

Global site tag (gtag.js) - Google Analytics