全局变量和过程: ch 字符变量,存放最新读入的源程序字符
strToken 字符数组,存放构成单词符号的字符串
GetChar 子程序过程,把下一个字符读入到ch中
GetBC 子程序过程,跳过空白符,直至ch中读到非空白符
Concat 子程序,把ch中的字符连接到strToken
IsLetter和IsDigit 布尔函数,判断ch中字符是否为字母和数字
Reverse 整型函数,对于strToken中的字符串查找保留字表,若它是保留字则给出它的编码,否则回送0
Retract 子程序,把搜索指针回调一个字符位置
InsertId 整型函数,将strToken中的标识符插入符号表,返回符号表指针
InsertConst 整型函数过程,将strToken中的常数插入常数表,返回常数表指针
各种单词符号对应的种别编码
单词符号种别编码单词符号种别编码
program1;17const2,18var3=19procedure4<>20begin5<21end6<=22if7>23then8>=24else9+25while10-26do11*27call12/28read13(29write14)30odd15id31:=16integer32
代码节选
void Analysis(int &code
)
{
for (int i
= 0; i
< 20; i
++)
strToken
[i
] = '\0';
GetChar();
row
++;
GetBC();
if (IsLetter())
{
while (IsLetter() || IsDigit())
{
Concat();
GetChar();
row
++;
}
Retract();
row
--;
code
= Reverse();
}
else if (IsDigit())
{
while (IsDigit())
{
Concat();
GetChar();
row
++;
}
Retract();
row
--;
code
= 32;
}
else if (ch
== ':')
{
Concat();
GetChar();
row
++;
if (ch
== '=')
{
Concat();
code
= 16;
}
else
{
Retract();
row
--;
code
= 0;
}
}
else if (ch
== ';')
{
Concat();
code
= 17;
}
else if (ch
== ',')
{
Concat();
code
= 18;
}
else if (ch
== '=')
{
Concat();
code
= 19;
}
else if (ch
== '<>')
{
Concat();
code
= 20;
}
else if (ch
== '<')
{
Concat();
code
= 21;
}
else if (ch
== '<=')
{
Concat();
code
= 22;
}
else if (ch
== '>')
{
Concat();
code
= 23;
}
else if (ch
== '>=')
{
Concat();
code
= 24;
}
else if (ch
== '+')
{
Concat();
code
= 25;
}
else if (ch
== '-')
{
Concat();
code
= 26;
}
else if (ch
== '*')
{
Concat();
code
= 27;
}
else if (ch
== '/')
{
Concat();
code
= 28;
}
else if (ch
== '(')
{
Concat();
code
= 29;
}
else if (ch
== ')')
{
Concat();
code
= 30;
}
else if (ch
== '\n' || ch
== '\0')
{
line
++;
row
= 0;
code
= -1;
}
else code
= 0;
sp
= -1;
}