编译原理-第3部分 词法分析(前三节详细总结)

1 引言

    雨后的清凉与温暖的阳光相遇,校园里是一片清静略带温暖的氛围。一个闲适的午后,经历过上午的一番疾风骤雨之后(练车被骂惨了。。。),我来到熟悉的图书馆,开始今天的CSDN之旅。今天分享的是编译原理中词法分析的知识,这也是构造编译器的第一步。

2 正文

2.1 词法分析器设计方法

2.1.1 概述

词法分析是编译的第一个阶段。

其任务是:
    从左至右逐个字符地对源程序进行扫描,产生一个个单词符号,把字符串形式的源程序改造成为单词符号串形式的中间程序。

    执行词法分析的程序称为词法分析程序,也称为词法分析器或扫描器。其功能是输入源程序,输出单词符号。

2.1.2 词法分析器的功能

读源程序,产生单词序列

剥去源程序中的注释(块、行)和“空白”符

预处理-宏处理与文件包含

2.1.3 词法分析可以采用的两种结构

 (1) 把词法分析程序作为主程序。

     将词法分析工作作为独立的一遍来完成,即把词法分析与语法分析明显分开,由词法分析程序将字符串形式的源程序改造成单词符号串形式的中间程序,以这个中间程序作为语法分析程序的输入。

(2) 把词法分析程序作为语法分析程序调用的子程序。

     在进行语法分析时,每当语法分析程序需要一个单词时便调用词法分析程序,词法分析程序每一次调用便从字符串源程序中识别出一个单词交给语法分析程序。

2.1.4 单词符号的分类与输出形式

1.单词符号分类

    词法分析程序简单地说就是读单词程序,该程序扫描用高级语言编写的源程序,将源程序中由单词符号组成的字符串分解出一个个单词来。

    因此,单词符号是程序语言的基本语法单位,具有确定的语法意义。

(1)保留字 (2)标识符 (3)常数 (4)运算符 (5)界符

2.词法分析程序输出单词的形式

通常表示成如下的二元式:

          (单词种别,单词自身的值)

(1)单词种别

单词种别表示单词的种类,它是语法分析所需要的信息。

(2)单词自身的值

单词自身的值是编译中其它阶段所需要的信息。

2.1.5 状态转换图

在词法分析中,可以用状态转换图来识别单词。

状态转换图是有限的有向图,结点代表状态,用圆圈表示;结点之间可由有向边连接,有向边上可标记字符。



    当到达一类单词符号的终止状态时即可给出相应的单词编码。

    某些终止状态是在读入了一个其它不属于该单词的符号后才得到相应的单词编码的,这表明在识别单词的过程中多读入了一个符号,所以识别出单词后应将最后多读入的这个符号予以回退;我们对此类情况的处理是在终态上以“*”作为标识。


2.2 一个简单的词法分析器示例

2.2.1 C语言子集的单词符号表示

2.2.2 C语言子集对应的状态转换图


2.2.3 状态转换图的实现











2.3 正规表达式与有限自动机简介

2.3.1 正规表达式与正规集

状态转换图对构造词法分析程序是行之有效的,为了便于词法分析器的自动生成,还须将状态转换图的概念加以形式化。
正规表达式就是一种形式化的表示法,它可以表示单词符号的结构,从而精确地定义单词符号集。        
正规表达式简称为正规式,它表示的集合即为正规集。













2.3.2 有限自动机





2.3.3 非确定性有限自动机


2.3.4 对比DFA和NFA




3 结束语

    以上就是前三节的内容,整理的非常详细,希望对大家有所帮助。

    分享和帮助是人生一大乐事,希望可以帮助您。本人才疏学浅,如果有不当之处,还请批评指正。同时欢迎大家评论、点赞及转发!

猜你喜欢

转载自blog.csdn.net/chen_yongbo/article/details/79841999