⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 用C++做的firstVT和lastVT
💻 CPP
字号:
#include<stdio.h>
#include<string.h>
#include<iostream>
#include"grammer.h"
#include"opf.h"
using namespace std;

void getgrammer(grammer *g);

int main()
{
	int i;
	char strIn[50];
	grammer g;
	init(&g);
	getgrammer(&g);
	printf("%d条产生式。\n",g.genNum);
	for(i=0;i<g.genNum;i++)
		printf("%s\n",g.generator[i]);
	OPFAnerlizer(&g,strIn);
	return 0;
}

int getLines(char **NG,char* filename)
{
	FILE *fg;
	if((fg=fopen(filename,"r"))==NULL)
	{
		printf("ERROR:file not found!\n");
		return -1;//错误返回-1
	}
	fseek(fg,0,2);
	int n =ftell(fg);//获得文件大小
	rewind(fg);
	printf("文件大小为:%d 字节\n",n);
	if(n==0)
	{
		printf("空文件!\n");
		return 0;
	}
	int row,colum=0;
	int linenum=1;
	NG[linenum-1]=(char *)malloc(50*sizeof(char));
	char cc;
	for(row=0;row<n;row++)
	{
		while((cc=fgetc(fg))!='\n'&&!feof(fg))
		{
			NG[row][colum++]=cc;
		}
		if(cc=='\n')
		{
			linenum++;
			NG[row][colum]='\0';
			NG[linenum-1]=(char *)malloc(50*sizeof(char));
		}
		if(feof(fg))
		{
			NG[row][colum]='\0';
			break;
		}
		colum=0;
	}
	fclose(fg);
	return linenum;
//	return 0;
}

void getgrammer(grammer *g)
{
	int i,j;
	char filename[255];
	printf("请输入正规文法文件名(绝对路径):");
	scanf("%s",filename);
	g->genNum=getLines(g->generator,filename);
	if(g->genNum==-1)  exit(0);
	g->vn[0] = g->vt[0] = 0;
    
	for(i=0; i<g->genNum; i++)
	{
		insert2set(g->generator[i][0],g->vn);
		for( j=3; j<strlen(g->generator[i]); j++)
		{
			if( g->generator[i][j] >= 'A' && g->generator[i][j] <= 'Z' )
			{
				insert2set(g->generator[i][j],g->vn);
			}
			else insert2set(g->generator[i][j],g->vt);
			
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -