FIRSTVT集生成算法C语言实现
时间: 2023-10-01 11:09:10 浏览: 58
以下是一个简单的FIRSTVT集生成算法的C语言实现,假设输入文法已经存储在一个数组中,文法符号用字符表示:
```c
#include <stdio.h>
#include <string.h>
#define MAX_PROD 50
#define MAX_LEN 10
char grammar[MAX_PROD][MAX_LEN];
int n;
int is_terminal(char c) {
return !(c >= 'A' && c <= 'Z');
}
void firstvt(char c, int *first) {
int i, j, k, nt;
for (i = 0; i < n; i++) {
if (grammar[i][0] == c) {
j = 2;
while (grammar[i][j] != '\0') {
if (is_terminal(grammar[i][j])) {
first[grammar[i][j] - 'a'] = 1;
break;
}
firstvt(grammar[i][j], first);
nt = 0;
for (k = j + 1; grammar[i][k] != '\0'; k++) {
if (is_terminal(grammar[i][k])) {
first[grammar[i][k] - 'a'] = 1;
break;
}
if (first[grammar[i][k] - 'A'] == 0) {
break;
}
nt++;
}
if (nt == k - j - 1) {
first[grammar[i][k] - 'A'] = 1;
}
j = k;
}
}
}
}
int main() {
int i, j;
int first[26] = {0};
printf("输入文法产生式个数:");
scanf("%d", &n);
printf("输入文法产生式:\n");
for (i = 0; i < n; i++) {
scanf("%s", grammar[i]);
}
printf("FIRSTVT集:\n");
for (i = 0; i < n; i++) {
firstvt(grammar[i][0], first);
printf("FIRSTVT(%c) = {", grammar[i][0]);
for (j = 0; j < 26; j++) {
if (first[j]) {
printf("%c, ", j + 'a');
}
}
printf("}\n");
memset(first, 0, sizeof(first));
}
return 0;
}
```
在该实现中,首先输入文法产生式的个数和具体内容,并在循环中逐个计算每个非终结符号的FIRSTVT集。在计算FIRSTVT集的过程中,使用了递归调用,对每个产生式符号进行处理,直到遇到终结符号或者无法推导出终结符号为止。
注意,该实现只适用于文法符号为单个字符的情况,如果文法符号包含多个字符,需要相应地修改代码。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)