📄 grammar.cpp
字号:
#include <stdio.h>
#include <iostream.h>
#include <string.h>
#define N 3 /*文法共有N条规则*/
#define M 20 /*每条规则最多有M个字符*/
void main()
{
int i,j,t;/*标志量*/
char n[N][M]; /*文法*/ int cnt[N];/*每个文法的字符个数*/
char m1[N*M];/*除去非终结符的符号集合m1*/ int cnt1=0;/*除去非终结符的符号集合m1*/
char m2[N*M]; /*终结符*/ int cnt2=1;/*终结符*/
char p[N+1];/*非终结符*/
/*输入文法*/
printf("请输入文法 :\n");
for(i=0;i<N;i++)
gets(n[i]);
/*输出文法*/
printf("\n输出文法 :\n");
for(i=0;i<N;i++)
puts(n[i]);
printf("\n\n\n");
/*各个规则n[i]的符号个数cnt[i]*/
for(i=0;i<N;i++)
cnt[i]=strlen(n[i]);
/*非终结符组成的集合p*/
printf("非终结符是 :\n ");
for(i=0;i<N;i++)
p[i]=n[i][0];
p[N]='\0';
puts(p);
/*终结符组成的集合m2*/
/*除去非终结符的其他符号组成的集合m1*/
for(i=0;i<N;i++)
for(j=4;j<cnt[i];j++)
m1[cnt1++]=n[i][j];
m1[cnt1]='\0';
/*终结符组成的集合m2*/
m2[0]=m1[0];
for(i=1;i<cnt1;i++)
{
t=0;
for(j=0;j<cnt2;j++)
{
if(m1[i]==m2[j])
t=1;
}
if((t==0) && (m1[i]!='|'))
m2[cnt2++]=m1[i];
}
m2[cnt2]='\0';
printf("终结符是 :\n");
puts(m2);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -