📜  编译器设计中标识符的转换图

📅  最后修改于: 2021-06-28 07:06:40             🧑  作者: Mango

过渡图是一种特殊的语言分析流程图。在过渡图中,流程图的框被绘制为圆圈,并称为状态。状态通过称为边缘的箭头连接。边缘上的标签或粗细表示该状态之后可能出现的输入字符。

标识符的转换图如下:

标识符读取第一个字母,然后在该字母或数字之后直到下一个输入字符成为标识符定界符的转换图,表示既不是字母也不是数字的字符。为了将过渡图变成一个程序,我们为过渡图的每个状态构造了程序段代码。

每个状态的程序段代码如下:

状态0:

C=GETCHAR();
if LETTER(C) then goto State 1
else FAIL() 

状态1:

C=GETCHAR();
if LETTER(C) OR DIGIT(C) then goto State 1
else if DELIMITER(C) then goto State 2
else FAIL() 

状态2:

RETRACT();
RETURN(ID, INSTALL())

在哪里,
输入缓冲区的下一个字符,我们使用GETCHAR()返回下一个字符。
LETTER(C)是一个过程,当且仅当C是字母时,它才返回值。
FAIL(C)是一个例程,该例程会回退前瞻指针并启动下一个转换图,否则将调用错误例程。
DIGIT(C)是一个过程,当且仅当C是数字时,它才返回值。
DELIMITER(C)是一个过程,当且仅当C是可以跟随标识符的字符时才返回值,例如空白符号,算术,逻辑运算符,左括号,右括号,+,:,;等等。
由于DELIMITER不是标识符的一部分,因此我们必须为此使用RETRACT()过程将前向指针缩进一个字符。
因为标识符具有值,所以要在符号表中安装标识符的值,我们使用INSTALL()过程。