编译器设计中的词法分析设计是什么?
词法分析可以使用状态转换图来设计。
有限自动机(状态转换图) - 用于识别词元的定向图或流程图。
状态转换图有两个部分:
状态 - 用圆圈表示。

边 - 状态由边(箭头)连接。
示例 - 绘制“if”关键字的状态转换图。

为了识别词元(“if”),词法分析必须读取“f”之后的下一个字符。根据下一个字符,它将判断是“if”关键字还是其他内容。

因此,“if”后的空格决定“If”是一个关键字。
最终状态3上的“*”表示回退,即控制将再次回到之前的状态2。因此,空格不是词元(“if”)的一部分。
标识符的状态转换图 - 标识符以字母开头,后跟字母或数字。状态转换图将是

例如,在语句**int a2;**中,标识符**a2**的状态转换图将是

由于(;)不是标识符(“a2”)的一部分,因此使用“*”进行回退,即返回到状态1以识别标识符(“a2”)。
标识符的状态转换图可以转换为程序代码,如下所示:
编码
State 0: C = Getchar() If letter (C) then goto state 1 else fail State1: C = Getchar() If letter (C) or Digit (C) then goto state 1 else if Delimiter (C) goto state 2 else Fail State2: Retract () return (6, Install ());
在状态2中,回退()将指针向后移动一个状态,即到状态1,并声明到状态1为止找到的任何内容都是一个词元。
词法分析将词元返回给语法分析器,不是以英文单词的形式,而是以对的形式,即(整数代码,值)。
对于标识符,返回给语法分析器的整数代码为6,如表所示。
Install() - 它将返回指向符号表的指针,即词元的地址。
下表显示了词法分析返回给语法分析器的各种词元的整数代码和值。
不同词元的整数代码
| 词元 | 整数代码 | 值 |
|---|---|---|
| Begin | 1 | - |
| End | 2 | - |
| If | 3 | - |
| Then | 4 | - |
| Else | 5 | - |
| 标识符 | 6 | 指向符号表的指针 |
| 常量 | 7 | 指向符号表的指针 |
| < | 8 | 1 |
| <= | 8 | 2 |
| = | 8 | 3 |
| <> | 8 | 4 |
| > | 8 | 5 |
| >= | 8 | 6 |
这些整数值不是固定的。不同的程序员在设计词法分析时可以选择其他整数代码和值。
假设,如果**标识符**存储在符号表中的位置236,则

类似地,如果**常量**存储在位置238,则
整数代码 = 7
Install()= 238 即,对将是(7,238)
词元的状转换图(有限自动机):




广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP