编译原理学习

编译原理学习笔记----

不确定有穷自动机(NFA)

一个不确定的有穷自动机T是一个五元组,M={K,∑,f,S,Z}

⒈K是一个有穷集他的每一个元素称作一个状态。

⒉∑是一个字母表,他的每一个元素称为一个输入符号。

⒊f是一个从Kx∑*到K的子集映射即K*∑*->2^K,其中2^K表示K的幂集。

⒋S包含于K集,是一个非空初态集合。

⒌Z包含于K是一个非空的终态集合。

确定有穷自动机(DFA)

一个确定的有穷自动机M是一个五元组:M=(K, ∑,f,S,Z)其中,

1)K是一个有穷集,他的每个元素称为一种状态。

2) ∑是一个有穷字母表,他的每个元素称为一个输入符号,所以∑称为输入符号表。

3)f是转换函数,是KX∑-->K 上的映像,例如f(ki,a)=kj这就意味着,当前状态为k,输入字符a后,将转换到下一状态kj,我们把kj称为ki的一个后继状态;

4)S属于K,是唯一的一个出态。

5)Z属于K,是一个终态,终态也称为可接受状态或结束状态。

例如:

这个DFA可以表示一个状态图:

也可以用状态矩阵显示,行表示状态,列表示输入符号,终态在表的右端标1,非终态在表的右边标0。

时间: 2024-10-26 10:43:08

编译原理学习的相关文章

编译原理学习导论

编译原理学习导论 大学课程为什么要开设编译原理呢?这门课程关注的是编译器方面的产生原理和技术问题,似乎和计算机的基础领域不沾边,但是编译原理却一直作为大学本科的必修课程,同一时候也成为了研究生入学考试的必考内容.编译原理及技术从本质上来讲就是一个算法问题而已,当然因为这个问题十分复杂,其解决算法也相对复杂.我们学的数据结构与算法分析也是讲算法的,只是讲的基础算法,换句话说讲的是算法导论,而编译原理这门课程讲的就是比較专注解决一种的算法了.在20世纪50年代,编译器的编写一直被觉得是十分困难的事情

编译原理学习笔记 -- 绪论1

1. 语言处理器 语言处理系统 _________ 经过预 _______ 源程序 --> |预处理器| --> 处理的 --> |编译器| --> 目标汇编程序 -------- 源程序 ------- _______ 可重定位的 ______________ --> |汇编器| --> 机器代码 --> |链接器/加载器| --> 目标机器代码 ------- -------------- ↑ 库文件/可重定位对象文件 预处理器:把源程序聚合在一起,并宏

[编译原理学习]词法分析

此前一直没能系统完整地学过编译原理,只有很粗浅的理解,虽然其实对工作里的任务也没啥影响,但总觉得缺了一大块知识,加上对所谓程序员三大浪漫(编译器,操作系统,图形学)的向往,所以最近跟着网易云课堂推出的计算机专业课程来学习编译原理.无奈生性懒惰,常常下班之后觉得累了,打打游戏啊看看视频啊,拖延症就犯了.......所以在这里打算将学习的过程,心得记录下来,也算是对自己的一个督促.课程传送门http://mooc.study.163.com/learn/USTC-1000002001#/learn/

编译原理学习:TINY语言词法扫描程序实现

最近对解释型程序(类似python或者是linux里的bc计算器)非常感兴趣,就开始学习一下编译原理.今天自己实现了TINY语言的词法扫描程序.大部分参考<编译原理及实践>一书.但是我做了一些小小的改进. 先说一下TINY语言: 1.注释:放在一对大括号内.书上的注释不能嵌套,我做了一点改进,允许嵌套. 2.关键字:read write if end repeat until else 3.类型:只支持整型和布尔型. 4.计算:+ - * / ( ) < = :=,其中:=为赋值运算,=

.net编译原理学习

今天来学习一些.net 的编译原理 首先通过书本上内容了解了: .net framewrok 的核心是运行库执行环境,称为公共语言运行库(CLR),在CLR控制下运行的代码称为代码托管(managed code) 但是在CLR执行已经编写好的源代码之前,需要先进行编译它们,编译分为两个阶段: 1.将源代码编译为microsoft中间语言(MSIL,简称IL) 2.将IL编译为平台专用的代码 稍微详细一点的过程是: 1.如果使用vs进行开发,则将源代码编译为IL的过程由vs来完成. 2.IL代码由

0909 关于编译原理学习的想法

1.编译原理旨在介绍编译程序构造的一般原理和方法,关注的是编译器方面的产生原理和技术问题.学习编译原理有利于提高编程人员的素质和技术. 2.通过学习编译原理可以更好地了解程序设计语言的内部机制,从而更好地了解和运用程序设计语言,最终能运用编译程序构造的原理和技术完成相关软件工具的设计和开发工作. 3.(1)反复钻研书本:(2)结合源代码来学习:(3)先行学习简单的,提高兴趣,再来学习困难的. 4.

编译原理学习随笔

编译原理就是什么? 编译原理是计算机必修的一门重要学科.编译原理及技术从本质上来讲就是一个算法问题而已,当然由于这个问题十分复杂,其解决算法也相对复杂. 我们学的数据结构与算法分析也是讲算法的,不过讲的基础算法,换句话说讲的是算法导论,而编译原理这门课程讲的就是比较专注解决一种的算法了. 学习编译原理有什么好处? 可以大大提高我们的编程能力,能更好的了解计算机内部运行结果,对进一步研究计算机系统有很大帮助,同时学会了编译原理也相当于学会了一种解决问题的方法,而且是强有力的方法.能让你一直在寻求高

编译原理学习基本概念汇总

对于计算机专业的学生来说,肯定听说过或者上过一门课,叫做--编译原理,被称为计算机专业的天书,反正不管是学习这门课的时候,还是现在,我都是没搞懂其中的技术和知识.但就期末考试而言,提前做了几道题目,得到了90+的分数,也算是可喜可贺.各位ITer如果想检验自己的智商的话,大可以去学习编译原理,你会收获很多的.现在我把大学时整理的编译原理最基本的概念分享出来. 第一章-绪论 1. 翻译,是指在计算机中放置一个能由计算机直接执行的翻译程序,它以某一种程序设计语言(源语言)所编写的程序(源程序)作为翻

编译原理学习笔记(十一)错误处理

错误处理 说明:以老师PPT为标准,借鉴部分教材内容,AlvinZH学习笔记. 1. 目标:编译程序对于语法和语义正确的源程序要正确地编译生成等价的目标代码:而对于错误的源程序不能一发现就停止,而是要能检查出错误的性质和出错位置,并使编译能继续下去,同时尽可能多而准确地发现错误和指出各种错误. 2. 编译器的错误处理能力 诊察各类错误的能力. 报错及时准确(出错位置,错误性质). 一次编译找出错误的多少. 改正错误的能力. 遏制重复错误信息的能力. 3. 错误分类:语法错误.语义错误. 语法错误