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

文章目录

  • 第一节 词法分析概述
    • 1.1 词法分析的功能
    • 1.2 词法分析与语法分析的交互方式
  • 第二节 单词的类别
    • 2.1 标识符
    • 2.2 关键字
    • 2.3 常数
    • 2.4 运算符
    • 2.5 界符
  • 第三节 单词的识别
    • 3.1 状态转换图
    • 3.2 状态转换图识别的字符串
    • 3.3 识别单词的状态转换圈
    • 3.4 单词的输出
  • 第四节 词法分析器实例
    • 4.1 确定单词的特征
    • 4.2 对单词进行编码
    • 4.3 设计状态转换图
    • 4.4 实现词法分析器

第一节 词法分析概述

1.1 词法分析的功能

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

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

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

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

    编译原理笔记【第六章 词法分析】_第1张图片

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

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

    编译原理笔记【第六章 词法分析】_第2张图片


第二节 单词的类别

2.1 标识符

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

2.2 关键字

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

int, if, else…

2.3 常数

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

2.4 运算符

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

2.5 界符

在程序中起到分界的作用

; {} () ,


第三节 单词的识别

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

3.1 状态转换图

结点:状态(唯一初态,若干终态)
有向边:状态转换关系
标记:状态转换的条件(读入的字符)
编译原理笔记【第六章 词法分析】_第3张图片

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

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

3.3 识别单词的状态转换圈

根据构成单词的特点,可构造出识别该单词的状态转换圈
编译原理笔记【第六章 词法分析】_第4张图片
在某些情况下,为例识别出某个单词,需要读取的字符可能超出了该单词本身的范围,称为超前搜索,在状态转换图中用带*的结点表示。识别完后应将这些字符退还给输入串,以备识别下一个单词使用。

3.4 单词的输出

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

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

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

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

  • 实例
    编译原理笔记【第六章 词法分析】_第5张图片

第四节 词法分析器实例

4.1 确定单词的特征

编译原理笔记【第六章 词法分析】_第6张图片

4.2 对单词进行编码

编译原理笔记【第六章 词法分析】_第7张图片

4.3 设计状态转换图

编译原理笔记【第六章 词法分析】_第8张图片

4.4 实现词法分析器

编译原理笔记【第六章 词法分析】_第9张图片

  • 初态
    编译原理笔记【第六章 词法分析】_第10张图片

  • 标记
    编译原理笔记【第六章 词法分析】_第11张图片

  • 分支
    编译原理笔记【第六章 词法分析】_第12张图片
    编译原理笔记【第六章 词法分析】_第13张图片

  • 循环—while语句
    编译原理笔记【第六章 词法分析】_第14张图片

  • 终态—单词输出
    编译原理笔记【第六章 词法分析】_第15张图片
    编译原理笔记【第六章 词法分析】_第16张图片
    编译原理笔记【第六章 词法分析】_第17张图片

你可能感兴趣的:(编译原理)