编译原理复习(3)词法分析


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

词法分析器:又称扫描器:执行词法分析的程序

对于词法分析器的要求

功能和输出形式

功能:输入 源程序,输出单词符号
在这里插入图片描述

通常二元式表示:(单词种别,单词自身的值)

单词符号的分类

(1)关键字:由程序语言定义的具有固定意义的标识符,也  
         称为保留字或基本字。
  例如:Pascal 语言中  begin   end  if  while 等。
  
(2)标识符:用来表示各种名字。
	如变量名、数组名、过程名等。

(3)常数:整型、实型、布尔型、文字型等
	例:100   3.14159   true   ‘sample’

(4)运算符:+、-、*、/
(5)界符: , ; (  ) 等

接口设计

1、词法分析器作为独立的一遍
在这里插入图片描述

2、词法分析器不作为独立的一遍
作为一个独立的子程序,词法分析和语法分析放在同一遍里,省掉了中间文件。
在这里插入图片描述
优点:

1.使整个编译程序的结构更简洁、清晰和条理化.
2. 提高编译程序的效率
3.增强编译程序的可移植性

词法分析器的设计

输入和预处理

预处理:

剔掉空白符、跳格符、回车符、换行符、注解部分等。

预处理子程序:

每当词法分析器调用时,就处理出一串确定长度(如120个字符)的输入字符,并将其装进词法分析器所确定的扫描缓冲区中。

扫描缓冲区的两个指示器:
 起点指示器,一个指向当前正在识别的单词的开始位置(即新单词的首字符)
搜索指示器,一个用于向当前搜索以寻找单词的终点

单词符号的识别

超前搜索。
1.关键字的识别

需要超前搜索才能确定哪些是基本字

2.标识符的识别

字母开头的字母数字串,后跟界符或算符

3.常数的识别

识别出算术常数并将其转变为二进制内码表示。有些也要超前搜索。

4.算符和界符的识别

把多个字符复合而成的算符和界符拼合成一个单一单词符号。:=, **, .EQ. , ++,--,>=

状态转换图及其实现

状态转换图:有限方向图
结点: 代表状态, 用圆圈表示, 状态之间用弧连接.
箭弧上的标记(字符): 代表在射出结点(即始结点)状态下可能出现的输入字符或字符类.
在这里插入图片描述
一个状态转换图可用于识别(或接受)一定的字符串。

状态转换图的实现

实现方法:用程序实现,让每个状态结点对应一小段程序。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值