编译原理_复习笔记3章

第三章 词法分析

词法分析的任务:从左至右逐个字符地对源程序进行扫描,产生一个个单词符号。

词法分析器(Lexical Analyzer) 又称扫描器(Scanner):执行词法分析的程序。功能是输入源程序、输出单词符号。

单词符号的种类:

  • 基本字:如 begin,repeat,
  • 标识符:表示各种名字:如变量名、数组名和过程名
  • 常数:各种类型的常数
  • 运算符:+,-,*,/,
  • 界符:逗号、分号、括号和空白

输入源程序输出二元组–输出的单词符号的表示形式: (单词种别,单词自身的值) 如(保留字,‘const’)、(运算符,‘=’)…

词法分析器作为一个独立子程序供语法分析器调用:词法分析是作为一个独立的阶段,但不处理为独立的一遍。

  • 作为独立阶段的优点:
    • 使整个编译程序结构简洁、清晰和条理化,
    • 有利于集中考虑词法分析一些枝节问题。
  • 不作为独立的一遍:
    • 将其处理为一个子程序。

词法分析与语法分析同时交替进行。词法分析器借助符号表将单词符号分解出来传给语法分析器,语法分析器(同样需要符号表)再接着向词法分析器取下一个单词,一个闭环。

正规表达式与有限(有穷)自动机

概念概览:正规集(程序的单词集合)-3.3.1节->正规式(词法规则)-3.3.5节->NFA(易于人工设计)<-3.3.23.3.3->DFA(易于程序实现)-3.3.6简化->DFA
                                      \ _3.3.4_ ->正规文法(词法规则,也可以用来描述正规集)

(Copyright © https://blog.csdn.net/s_gy_zetrov. All Rights Reserved)

NFA:非确定有限自动机,不容易程序实现,需要经过确定化,得到DFA

DFA:确定有限自动机

正规集可以用正规表达式(简称正规式)表示。正规表达式是表示正规集一种方法。一个字集合是正规集当且仅当它能用正规式表示。

正规文法也可以描述正规集,与正规式作用相同。因为第四章开始就要用文法了。正规式只能描述词法分析,语法与语义分析都要用到文法。

正规式和正规集的递归定义:对给定的字母表∑

  • 1) ℇ 和 ∅ 都是 ∑ 上的正规式,它们所表示的正规集为 {ℇ} 和 ∅ ;
  • 2) 任何a(此处a为字符) ∈ ∑ ,a(此处a为正规式)是 ∑ 上的正规式,它所表示的正规集为{a(此处a为集合中的一个字)} ;

要想做一个词法分析器,我们首先需要一个程序的所有单词的集合,我们称之为【正规集】,有个【正规集】我们就可以用【正规式】来描述正规集(通过对单词集进行分类:运算符一类、整数一类、标识符一类等,都用正规式描述出来),用【“或”】连接。描述出来后这些正规式都可以分别去构造有限自动机:引入初态X、终态Y,把正规式写在XY的箭弧上,反复用书50面的3条替换规则(连接、或、闭包)做转换,逐步把这个图转变为每条弧只标记为 ∑ 上的一个字符或 ℇ ,即从正规式得到NFA。然后进行NFA确定化使用「ℇ-闭包【ℇ-closure(I)】、Ia、Ib、Ja(一说J1,识别1个a到的状态的集合)、Jb(同理,识别1个b)、构造状态表」,这里就需要算J,例如J可以是从I识别一个a到的状态的集合。详见书50面下方的表格。即从NFA得到等价的DFA(得到的DFA通常未化简)。

DFA化简:前面的得到的DFA中很多状态是等价的,所以这些状态中我们只留一个。化简的过程中还是用ℇ-闭包【ℇ-closure(I)】。

  • 明确【什么叫两个状态是等价的】概念:假设s和t为M的两个状态,称s和t等价: 如果从状态s出发能读出某个字 α 而停止于终态,那么同样,从t出发也能读出 α 而停止于终态;反之亦然。
  • 两个状态不等价,则称它们是可区别的。有区别的状态要放到不同的集合中(如最开始时把所有状态集分为终态和非终态,然后一个个检查,算Ia等,看Ia是不是在同一个集合中,如果Ia分布在不同的集合里面,代表当前的状态是可以划分的)。
  • 对一个DFA M最少化的基本思想: 把M的状态集划分为一些不相交的子集,使得任何两个不同子集的状态是可区别的,而同一子集的任何两个状态是等价的。最后,让每个子集选出一个代表,同时消去其他状态。

如何检验DFA构造出的文法是正确的?

  • 根据文法在构造出状态机,看是否一样
  • 以初态到终态所有路走一遍,看识别的语言和文法推导出的语言是否相等

文法和自动机等价是什么意思

  • 从自动机初态出来一直到终态(所有路走一遍写出正规式),看它能识别 什么语言。如果和文法(开始符号出来推导看)识别的语言,如果语言一样则说明是等价的。

(Copyright © https://blog.csdn.net/s_gy_zetrov. All Rights Reserved)


visitor tracker
访客追踪插件


猜你喜欢

转载自blog.csdn.net/S_gy_Zetrov/article/details/81751135