📄 main.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 + -