美文网首页
编译原理系列之三 词法分析

编译原理系列之三 词法分析

作者: getianao | 来源:发表于2018-12-23 17:09 被阅读0次

词法分析

  • NFA与DFA的等价性

    对于每个NFA M ′都一定存在一个DFA M,使L(M′)=L(M)。

  • NFA转DFA子集法

    状态集合I的ε-闭包:ε-closure(I),表示I中任意状态S经过任意条ε弧能到达的状态的集合。

    1. <u>首先从初态S开始,计算它的ε-closure(S)为I0,然后计算当前状态下对于输入符号∑中任意字符a的ε-closure(move(I~0~,a))为Ia,</u>如果Ia曾在状态中出现过,则将它标记,否则说明它是新的状态集合,后面会对它进行操作。

    2. 将没有标记的某个Ia作为I1,将它标记,重复上面的操作。

    3. 所有状态均标记则转换完成。

    例: 将下图中的NFA转换为DFA

    NFA

    解:

    状态 I Ia Ib
    0 (初态) {<u>0</u>,1,2,4,7} {<u>3,8</u>,6,7,1,2,4}✔️ {<u>5</u>,6,7,1,2,4}✔️
    1 {<u>3,8</u>,6,7,1,2,4} {<u>3,8</u>,6,7,1,2,4}✔️ {<u>5,9</u>,6,7,1,2,4}✔️
    2 {<u>5</u>,6,7,1,2,4} {<u>3,8</u>,6,7,1,2,4}✔️ {<u>5</u>,6,7,1,2,4}✔️
    3 {<u>5,9</u>,6,7,1,2,4} {<u>3,8</u>,6,7,1,2,4}✔️ {<u>5,10</u>,6,7,1,2,4}✔️
    4(终态) {<u>5,10</u>,6,7,1,2,4} {<u>3,8</u>,6,7,1,2,4}✔️ {<u>5</u>,6,7,1,2,4}✔️

    重新命名后的状态转换矩阵:

    状态 I a b
    0 (初态) {<u>0</u>,1,2,4,7} 1 2
    1 {<u>3,8</u>,6,7,1,2,4} 1 3
    2 {<u>5</u>,6,7,1,2,4} 1 2
    3 {<u>5,9</u>,6,7,1,2,4} 1 4
    4(终态) {<u>5,10</u>,6,7,1,2,4} 1 2
    DFA

    )

  • DFA的最小化

    1. 消除多余状态:

      从DFA初态进入遍历所有状态,从未被访问过的状态就为多余状态。可以删除状态以及相关的弧。

    2. 合并等价状态(分割法):

      ①首先将DFA的状态集分为两个状态区间:非终态区间和终态状态区间。

      ②然后对于每个状态区间采用下面的方法检查是否可以分割:

      对于某一种输入字符,计算状态区间中每个字符对于该输入的转移状态,每个字符的转移状态按照是否属于当前状态区间分类,即转移状态属于当前状态区间为一类,转移状态不属于当前状态区间为一类。如果存在两种状态分类则将其分成两个新的状态区间。

      ③重复以上过程直至无新状态区间产生。

    例:将下面的DFA最小化:

    DFA

    ①没有多余状态。

    ②合并等价状态

    DFA的状态集k={1,2 ,3,4,5,6,7}

    按照终态分类后

    {{1,2 ,3,4},{5,6,7}}

    读入a之后

    {{1,2 },{3,4},{5},{6,7}}

    读入a之后

    {{1,2 },{3},{4},{5},{6,7}}

    再读入a或b没有新状态生成。

    合并之后

    DFA
  • 正规文法转NFA:

    ①在原有字母表上增加终态F。

    ②假设线性文法G=(VN,VT,P,S), 按照下面方法构造状态转移函数f:

    1. P中形如A→aB的产生式,则有f(A,a)=B;
    2. P中形如A→a的产生式,则有f(A,a)=F ;
    3. 对VT中的每个a,都有f(F,a)= Ø
  • 将正规表达式转换成等价的有限自动机,要分三步:

三步

相关文章

  • 编译原理系列之三 词法分析

    词法分析 NFA与DFA的等价性:对于每个NFA M ′都一定存在一个DFA M,使L(M′)=L(M)。 NFA...

  • 你不知道的JavaScript —— 作用域是什么

    1.1 编译原理 传统编译步骤 分词/词法分析(拆分成一个个词法单元)——>解析/语法分析(词法单元流转化为抽象语...

  • 编译原理->词法分析

    词法分析器的作用 词法分析器的主要任务是读入源程序的输入字符、将它们组成词素,生成并输出一个词法单元序列,每个词法...

  • 第一章作用域是什么

    1.1 编译原理 编译语言 分词/词法分析 解析/语法分析 代码生成 对于Javascript来说,大部分情况发生...

  • 什么是作用域

    编译原理 传统编译语言 词法分析:将由字符组成的字符串分解成(对编译语言来说)有意义的代码块,这些代码块被称为词法...

  • 作用域(一)

    编译原理 分词/词法分析这个过程称为分解代码块(词法单元),比如 var a = 2;。这个程序通常会被分解成为下...

  • 2018-09-07

    编译原理 Ch1 概念 编译程序 编译程序由八部分组成: 词法分析程序 语法分析程序 语义分析程序 中间代码生成程...

  • 编译原理大体概念

    编译原理学习 名词解释翻译器 translator编译器 compiler 高级语言--->低级语言词法分析 ...

  • 编译原理之词法分析

    词法分析的问题 术语 模式(pattern):产生和识别元素的规则 记号(token): 按照某个模式(或规则)识...

  • 编译原理:词法分析程序

网友评论

      本文标题:编译原理系列之三 词法分析

      本文链接:https://www.haomeiwen.com/subject/yjmnkqtx.html