grammar.cpp

来自「输入任意文法」· C++ 代码 · 共 64 行

CPP
64
字号
#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 + =
减小字号Ctrl + -
显示快捷键?