编译原理笔记【第六章 词法分析】

第一节 词法分析概述

1.1 词法分析的功能

扫描源程序的字符串,按照词法规则,识别出单词作为输出;对识别过程中发现的错误,输出有关的错误信息。

1.2 词法分析与语法分析的交互方式

  1. 词法分析器作为单独的一遍

    这种方式需要一种数据结构去存放所有的单词

    在这里插入图片描述

  2. 词法分析器作为子程序

    词法分析器被语法分析器调用

    在这里插入图片描述


第二节 单词的类别

2.1 标识符

由用户定义
用来对程序中出现的变量、函数、过程、标号等。
不同语言的标识符有不同的规则

2.2 关键字

也称保留字,由语言定义
具有特殊的含义

int, if, else…

2.3 常数

整型常数、实型常数、字符型常数、布尔型常数

2.4 运算符

算术运算符、逻辑运算符、关系运算符、赋值运算符

2.5 界符

在程序中起到分界的作用

; {} () ,


第三节 单词的识别

根据各类单词的特征,从输入字符串中识别出单词,并把这些单词输出

3.1 状态转换图

结点:状态(唯一初态,若干终态)
有向边:状态转换关系
标记:状态转换的条件(读入的字符)
在这里插入图片描述

3.2 状态转换图识别的字符串

从初态出发到某一终态,所经过路径上的所有字符的连接。

3.3 识别单词的状态转换圈

根据构成单词的特点,可构造出识别该单词的状态转换圈
在这里插入图片描述
在某些情况下,为例识别出某个单词,需要读取的字符可能超出了该单词本身的范围,称为超前搜索,在状态转换图中用带*的结点表示。识别完后应将这些字符退还给输入串,以备识别下一个单词使用。

3.4 单词的输出

  • 单词的输出形式
    二元式(单词的编码,单词的属性)

  • 单词的编码
    用于区分单词的类别,不同类别的单词采用不同的编码方式

  • 单词的属性
    用于区分相同编码的不同单词

标识符:(统一一个编码,该标识符在符号表中的位置)
常数:统一一个编码,该常数在常数表中的位置)
关键字:(一字一码,省略)
运算符:(一字一码,省略)
界符:(一字一码,省略)

  • 实例
    在这里插入图片描述

第四节 词法分析器实例

4.1 确定单词的特征

在这里插入图片描述

4.2 对单词进行编码

在这里插入图片描述

4.3 设计状态转换图

在这里插入图片描述

4.4 实现词法分析器

在这里插入图片描述

  • 初态
    在这里插入图片描述

  • 标记
    在这里插入图片描述

  • 分支
    在这里插入图片描述
    在这里插入图片描述

  • 循环—while语句
    在这里插入图片描述

  • 终态—单词输出
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值