}
if (lflag[i] == 0)
{
n = last[i][0] + 1;
m = 0;
do
{
if (st[i][m + 1] == '\0' || st[i][m + 1] == '|')
{
if (zhongjie(st[i][m]))
last[i][n] = st[i][m];
n++;
{
}
else
{
if (zhongjie(st[i][m - 1]))
{
}
last[i][n] = st[i][m - 1];
n++;
if (st[i][m] != c)
{
lastvt(st[i][m]);
for (j = 0; j
}
}
}
}
}
m++;
} while (st[i][m] != '\0');
last[i][n] = '\0';
last[i][0] = --n;
lflag[i] = 1;
}
}
//转换 “|”
void transform()
// 转换 带"|"的文法
{
char text[20][10];
int i, j, l, x = 0, y = 0;
x = 0;
for (i = 0; i';
text[x][y] = st[i][j];
y++;
}
else
{
}
}
text[x][y] = '\0';
x++;
y = 0;
}
r1 = x;
printf("转化后的文法为:\n");
for (i = 0; i
"
后的转化文法)*/
String[i][0] = text[i][0];
for (j = 3, l = 1; text[i][j] != '\0'; j++, l++)
String[i][l] = text[i][j];
String[i][l] = '\0';
{
}
}
//每个非终结符求 lastvt
void table2()
{
}
for (int i = 0; i/*last[i][0]表示 LASTVT 集中元素的个数*/
last[i][0] = 0;
}
for (i = 0; i'Z')
{
}
printf("不是算符文法!\n");
exit(-1);
if (st[i][j] >= 'A'&&st[i][j] <= 'Z')
{
}
if (st[i][j + 1] >= 'A'&&st[i][j + 1] <= 'Z')
{
}
printf("不是算符文法!\n");
exit(-1);
}
}
for (i = 0; i'Z') && st[i][j] != '-'&&st[i][j] !=
'>'&&st[i][j] != '|')
lable[k++] = st[i][j];
}
}
}
//输出结果
void output()
{
int i = 0, j = 0;
printf("每个非终结符的 LASTVT 集为:\n");
//输出每个非终结符的 LASTVT 集
for (i = 0; i