编译器设计中的词法分析设计是什么?


词法分析可以使用状态转换图来设计。

有限自动机(状态转换图) - 用于识别词元的定向图或流程图。

状态转换图有两个部分:

  • 状态 - 用圆圈表示。

  • - 状态由边(箭头)连接。

示例 - 绘制“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() - 它将返回指向符号表的指针,即词元的地址。

下表显示了词法分析返回给语法分析器的各种词元的整数代码和值。

         不同词元的整数代码

         词元整数代码
Begin1-
End2-
If3-
Then4-
Else5-
标识符6指向符号表的指针
常量7指向符号表的指针
<81
<=82
=83
<>84
>85
>=86

这些整数值不是固定的。不同的程序员在设计词法分析时可以选择其他整数代码和值。

假设,如果**标识符**存储在符号表中的位置236,则

类似地,如果**常量**存储在位置238,则

整数代码 = 7

Install()= 238 即,对将是(7,238)

词元的状转换图(有限自动机):




更新于:2021年10月23日

12K+ 次浏览

启动您的职业生涯

通过完成课程获得认证

开始学习
广告