![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编译原理
jenhy
无
展开
-
词法分析(1)---词法分析的有关概念以及转换图
词法分析是编译的第一个阶段,前面简介中也谈到过词法分析器的任务就是:字符流------>词法记号流这里词法分析和语法分析会交错进行,也就是说,词法分析器不会读取所有的词法记号再使用语法分析器来处理,通常情况下,每取一个词法记号,就送入语法分析器进行分析,图解:词法分析器是编译器中与源程序直接接触的部分,因此词法分析器可以做诸如1). 去掉注释,自动生成文档(c#中的///注释)2). 提供错误转载 2007-06-24 16:06:00 · 6513 阅读 · 2 评论 -
词法分析(5)---从正规式到NFA
在说到这个问题前,先告诉大家,我们可以直接从 Regular expression 到 DFA,不过这里我们先不讨论这个问题关于RE到DFA的算法有很多,这里学习一个最简单的Algorithm Thompsons construction:Input : 一个字母表(Σ)上的 Regular Experssion rOutput : 一个接受 L(r) 的 NFA NMethod : 把 r 解转载 2007-06-24 16:09:00 · 5192 阅读 · 0 评论 -
词法分析(3)---DFA
1. DFA(Deterministic Finite automaton)DFA就是确定的有限自动机,因为DFA和NFA关系密切,我们经常需要把他们拿到一起来讲,NFA可以转化成为一个DFA,DFA依然是一个数学model,它和NFA有以下区别 不存在ε-transition,也就是说,不存在ε为input symbol的边 对于move函数,move : (sta原创 2007-06-24 16:07:00 · 2113 阅读 · 0 评论 -
词法分析(2)---NFA
假定一个输入符号(symbol),可以得到2个或者2个以上的可能状态,那么这个finite automaton就是不确定的,反之就是确定的。例如:这就是一个不确定的无限自动机,在symbol a输入的时候,无法确定状态应该转向0,还是1不论是确定的finite automaton还是非确定的finite automaton,它们都可以精确的描述正规集(regular sets)我们可以很方便的把正转载 2007-06-24 16:07:00 · 1818 阅读 · 0 评论 -
语法分析(1)---上下文无关的文法(context-free grammars)
文法(syntax)是一种描述编程语言结构的规则,比如,程序由语句块(block)组成,语句块又是由语句构成,语句又由表达构成,表达又是由词法记号(token)构成文法可以使用上下文无关的文法(context-free grammars)或者BNF(Backus - Naur Form)范式来描述 分析器(parser):从图中可以看出,parser获取词法记号流(转载 2007-06-24 16:12:00 · 7655 阅读 · 0 评论 -
编译简介
注意:本类(和编译有关)文章大多参考《编译原理》,作者:陈意云,张昱《Compiler:Principles,Techniques,and Tools》,作者:Alfred V.Aho, Ravi Sethi, Jeffrey D.Ullman( 笔者推荐书籍)1. 编译器(compiler)编译器是一种软件,它能够把一种语言(这种语言被成为source language)写的程序转化成为另外一种转载 2007-06-24 16:05:00 · 838 阅读 · 0 评论 -
词法分析(6)---DFA的化简
通过NFA转化而成的DFA不一定是最简的,也就是说,有多余的状态可以被删除,对于每一个正规定义,我们一定可以得到一个唯一的最简的DFA我们回顾一下Move函数,DFA的move函数:move : (state, symbol) -> S注意,这里(state, symbol)表示的是一个集合,这里规范的数学表达应该是:move : { (state, symbol) |转载 2007-06-24 16:10:00 · 11650 阅读 · 0 评论 -
词法分析(4)---NFA与DFA的转化
1. 子集构造(Subset Construction)这是一个转换NFA到DFA的算法。我们知道NFA和DFA的区别最主要的就是一个状态和一个input symbol是否能够确定一个状态的问题,对于NFA,它将确定一个组状态,而DFA将确定一个状态,因此,我们有一个很好的办法就是把NFA的状态集对应每个DFA的状态,这就是subset construction的思想,不过这只是大概泛泛而论,我们转载 2007-06-24 16:08:00 · 2858 阅读 · 0 评论