测试源码E01.PL0 PROGRAM EX01; 88 := READ(A); END. 要求 设计测试方式(将语句必须写在getsym()合适的地方),测试单词是否能被识别(只完成了词法分析部分,代码运行出错不用理会) Form1->printfs (“关键字”); Form1->printfs ("标识符"); Form1->printfs("数字"); Form1->printfs(“双符号"); Form1->printfs("单字符");
时间: 2024-01-24 20:17:02 浏览: 183
假设该测试源码已经被读入到程序中,我们需要在getsym()函数中添加代码来测试单词是否能被识别。以下是一个可能的实现:
```
void getsym() {
// 省略部分代码
if (isalpha(ch)) { // 如果是字母
// 识别关键字或标识符
int len = 0;
while (isalnum(ch)) {
id[len++] = ch;
getch();
}
id[len] = '\0';
if (strcmp(id, "88") == 0) {
Form1->printfs("关键字");
} else {
Form1->printfs("标识符");
}
} else if (isdigit(ch)) { // 如果是数字
// 识别数字
int num = 0;
while (isdigit(ch)) {
num = num * 10 + (ch - '0');
getch();
}
Form1->printfs("数字");
} else if (ch == ':') {
getch();
if (ch == '=') {
Form1->printfs("双符号");
getch();
} else {
Form1->printfs("单字符");
}
} else {
// 其他情况
// 省略部分代码
}
}
```
我们可以将测试源码中的语句分别放在不同的位置来进行测试。例如:
```
void getsym() {
// 省略部分代码
if (isalpha(ch)) { // 如果是字母
// 识别关键字或标识符
int len = 0;
while (isalnum(ch)) {
id[len++] = ch;
getch();
}
id[len] = '\0';
if (strcmp(id, "88") == 0) {
Form1->printfs("关键字");
} else {
Form1->printfs("标识符");
}
} else if (isdigit(ch)) { // 如果是数字
// 识别数字
int num = 0;
while (isdigit(ch)) {
num = num * 10 + (ch - '0');
getch();
}
Form1->printfs("数字");
} else if (ch == ':') {
getch();
if (ch == '=') {
Form1->printfs("双符号");
getch();
} else {
Form1->printfs("单字符");
}
} else {
// 其他情况
// 省略部分代码
}
// 测试语句位置1:测试数字
// E01.PL0 PROGRAM EX01; 88 := READ(A); END.
/*
while (ch != ';') {
getch();
}
getch();
*/
// 测试语句位置2:测试关键字和标识符
// E01.PL0 PROGRAM EX01; 88 := READ(A); END.
/*
getch();
getch();
getch();
*/
// 测试语句位置3:测试单字符
// E01.PL0 PROGRAM EX01; 88 := READ(A); END.
/*
getch();
getch();
getch();
getch();
getch();
*/
}
```
将getsym()函数中的测试语句注释掉,然后分别运行测试语句位置1、2、3的代码,即可测试单词是否能被识别。
阅读全文