编译原理课程总结--第三章:词法分析

本文详细介绍了词法分析器的工作原理,包括输入缓冲区、预处理子程序、扫描缓冲区和扫描器的功能。重点讨论了三种识别单词的方法:超前搜索、直接分析法和状态转换图,并深入探讨了正规式与有限状态自动机的等价性,包括确定有限自动机(DFA)和非确定有限自动机(NFA)的概念及其化简过程。
摘要由CSDN通过智能技术生成

对于词法分析的任务就是从左至右逐个字符的对源程序进行扫描,产生一个个的单词符号,把作为字符串的源程序改造成为由单词符号串组成的程序,执行这个程序的就叫做词法分析器
所以词法分析器从功能上看就是输入源程序得到单词符号
源程序就是我们编写的程序,这里的单词符号指的是一个程序语言的基本语法符号,一般包括关键字、标识符、常数、运算符、界符五种。
而词法分析器输出的单词符号的形式常常用二元式来表示如: <单词种别,单词符号的属性值>
【单词种别: 通常用整数编码来表示;

注意:
(1)若一个种别只包含一个单词符号(一种一字),对于该单词符号,种别编码就可以代表它自身了。例如:关键字,运算符,界符
(2)若一个种别包含有多个单词符号(一种多字),对于该种别的每个单词符号,除了给出种别编码,还需给出单词符号的属性值
例如:整型常数,实型常数,布尔常数,标识符

单词符号的属性:指单词符号的特性或特征
单词符号的属性值:反映单词特性或特征的值

举例说明如下:

1)基本字,运算符,界符(一字一种)只给其种别编码,不给出它的属性值
   例:基本字while表示成: <$WHILE, - > 
(2)常数
  表示成标准的二进制形式
 例:1024表示成:<$CONST, 1024的二进制表示> 
(3)标识符
用字符串编码或对应的符号表项地址
例:name表示成:<$ID,“name”>
        或<$ID, 指向name的符号表项的指针>

然后关于词法分析器的设计,首先看到词法分析器的结构:
词法分析器的结构

  1. 输入缓冲区、预处理子程序
    (1)输入源程序文本,放入输入缓冲区中,词法分析工作可在这个输入缓冲区中工作
    (2)剔除无用的空白,跳格(TAB),回车,换行等编辑性字符;若空白符号为单词符号的界符,就将若干空白和并为1个
    (3)剔除注释行,比如//
    (4)源程序的出错列表打印
    (5)将预处理好的子程序放到扫描缓冲区中

2、2.扫描缓冲区、扫描器
(1)扫描缓冲区 设两个半区,可互补使用(因为不论扫描缓冲区设得多大都不能保证单词符号不会被它的边界所打断,因此使用一分为二的区域)
这里写图片描述
设两个指针
起点指针:指出正在识别单词起点位置
搜索指针:向前搜索以寻找单词终点
(2)扫描器:扫描缓冲区,直接进行单词的识别

在识别单词的具体中主要有三种方法 超前搜索、直接分析法、状态转换图
(1)超前搜索
在单词识别的过程中,通过向前多读几个符号的形式,准确的进行单词的识别
一旦确定识别到的单词之后&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值