编译原理的试验,小弟自己写的,百分百元创。
#include<stdio.h>
#include<conio.h>
#include<string.h>
FILE *fp;
typedef struct
{
char temp[100][100];
int result[100];
}number;
typedef struct
{
char chara[100][50];
}ch;
/*全局变量begin*/
number num;
ch character;
int r = 0;/*整数型变量计数器*/
char key[100][50] =
{
{"wang"},
{"liang"}
}; /*定义关键字*/
char customer[100][50];/*用户自定义*/
char keyword[100][50];/*关键字*/
int cus = 0; /*customer计数器*/
int kw=0; /*keyword的计算器*/
/*全局变量end*/
void initKey()
{
*(key+2)[0] = NULL;
}
void getCustomer(char *s1) /*在把输入的串分类后用于把字符串存到customer数组中*/
{
strcpy(customer[cus],s1);
cus++;
customer[cus][0] = NULL;
}
int getKeyWord(char *s1)/*在把输入的串分类后用于把字符串存到keyword数组中*/
{
int k = 0;
while(key[k][0] != NULL)
{
if(0 == strcmp(key[kw],s1))
{
strcpy(keyword[kw],s1);
kw++;
keyword[kw][0]=NULL;
return 1;
}
k++;
}
return 0;
}
void parseInt(char *p )/*把字符串转换成int*/
{
int temp=0;
while( *p != '#')
{
temp =( temp + (*p - '0') ) * 10;
p++;
}
num.result[r] = temp/10;
r++;
num.result[r] = NULL;
}
void classify(char c ,int *i, int *j, int *w, int *q,int *flag)/*用于把数值字符串,和字符串分开*/
{
if( 0 == *q && 0 == *j )
{
if(c>='0' && c<='9')
{
*flag = 1;
}
if((c >= 'A' && c <= 'z') || (c >='a' && c <= 'z'))
{
*flag = 2;
}
}
if(c>='0' && c<='9' && 1 == *flag)
{
num.temp[*i][*j] = c;
(*j)++;
}
if(((c >= 'A' && c <= 'z') || (c >='a' && c <= 'z') || ( c >= '0' && c <= '9')) && *flag ==2)
{
character.chara[*w][*q] = c;
(*q)++;
}
if(c == ' ' || c == EOF)
{
if(1 == *flag)
{
printf("/n/n");
num.temp[*i][*j] = '#';
parseInt(num.temp[*i]);
(*j) = 0;
(*i)++;
}
else if(2 == *flag)
{
character.chara[*w][*q] = '/0';
if(getKeyWord(character.chara[*w])==0)
{
getCustomer(character.chara[*w]);
}
*q = 0;
(*w)++;
}
else
*flag = -1;
}
}
void getOnebyOne(FILE *fp) /*逐个取文件中的字符*/
{
int i = 0 , j = 0 , w = 0, q = 0, flag = -1;
char c;
c = getc(fp);
while(c !=EOF )
{
/*printf("%c",c);*/
classify(c, &i, &j, &w, &q, &flag);
c = getc(fp);
}
classify(c, &i, &j, &w, &q, &flag);
}
void main()
{
int n = 0;
clrscr();
if(NULL == fopen("D://wl.txt","r"))
{
printf("can not open the file");
getch();
return ;
}
else
fp = fopen("D://wl.txt","r");
initKey();
getOnebyOne(fp);
printf("int ");
printf("/n/n");
while(num.result[n] != NULL)
{
printf("%d ",num.result[n]);
n++;
}
n = 0;
printf("/n/n");
printf("keyword");
printf("/n/n");
while(keyword[n][0] != NULL)
{
printf("%s", keyword[n]);
n++;
}
n = 0;
printf("/n/n");
printf("customer");
printf("/n/n");
while(customer[n][0] != NULL)
{
printf("%s",customer[n]);
n++;
}
getch();
}