词法分析
词法分析器的要求
词法分析器又称为扫描器,是执行词法分析的程序。
1、词法分析的主要工作: 从源程序的第一个字符开始,从左到右扫描源程序,一次读一个字符,根据词法规则将有关字符组合成单词,并识别各类单词,当确定单词类别后,将单词输出。其输出形式为二元式:
单词类别 | 单词值 |
---|
2、程序语言的单词符号可以分为以下5种:
(1)关键字
(2)标识符
(3)常数
(4)运算符(加,减,乘,除,取余等)
(5)界符(逗号,分号,括号,空白等)
词法分析器的设计
1、源程序的输入方式
(1)一次性输入:当内存较大时,把源程序一次性输入到内存的用户数据区,每个字符占一个字节,词法分析程序从数据区中依次读入字符。
(2)分批次输入:当内存不够大时,在内存开辟一个适当大小的输入缓冲区,输入时,把源程序分批输入到输入缓冲区,词法分析程序从缓冲区中读取字符,当缓冲区的字符全部读完以后,再从外存上读入下一批,直到全部源程序字符读完为止。
2、超前搜索:即先向前读取字符和判别字符是什么,不马上处理,当情况判明后,再回来处理已读过的字符。
3、状态转换图
状态转化图是有向图,在状态转换图中,结点代表状态(圆圈表示),状态之间用带箭头的弧线(即箭弧)表示,一张转换图只包含有限个状态,包含一个初态,至少一个的终态(双圆圈表示),箭弧上的标记代表在箭弧起始结点状态下可能出现的输入字符或字符类。举例:
一个状态转换图可用于接受(或识别)一定的符号串。在状态转换图中从初始状态到某一终止状态的序列为路。对于某一符号串β,在状态转换图中,若存在一条路产生β,则称状态转换图接受(或识别)该符号串β,否则符号串β不能被接受。能被状态转换图TG接受的符号串的集合记为L(TG),称为状态转换图所能识别的语言。
4、正则文法的状态转换图表示
1)右线性文法:
对于右线性文法G[S](U→xV|y),状态转换图的表示方法如下:
(1)用状态表示G[S]中的非终结符,G[S]的开始符号S对应状态转换图的开始状态S;
(2)增加一个新状态Z,作为状态转换图的终止状态;
(3)对于G[S]中形如U→xV的每条产生式