编译原理:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
FILE *fp;
char SYM;
char buff[100];
int Left_p=0,Right_p=0;
void proc_E();
void proc_E1();
void proc_T();
void proc_T1();
void proc_F();
void proc_F1();
void proc_P();
void ERROR();
void SUCCESS();
#include <stdlib.h>
#include <conio.h>
FILE *fp;
char SYM;
char buff[100];
int Left_p=0,Right_p=0;
void proc_E();
void proc_E1();
void proc_T();
void proc_T1();
void proc_F();
void proc_F1();
void proc_P();
void ERROR();
void SUCCESS();
void main()
{
clrscr();
if((fp=fopen("string.txt","r"))==NULL)
{
printf("cannot open file!/n");
exit(0);
}
fread(buff,1,99,fp);
fseek(fp,0,0);
SYM=fgetc(fp);
proc_E();
fclose(fp);
}
void advance()
{
SYM=fgetc(fp);
if(SYM=='(') Left_p+=1;
if(SYM==')') Right_p+=1;
if(SYM!='('&&SYM!=')'&&SYM!='a'&&SYM!='b'&&SYM!='^'&&SYM!='+'&&SYM!='*'&&SYM!='#')
ERROR();
if(SYM=='#')
{
if(Left_p!=Right_p)
ERROR();
else SUCCESS();
fclose(fp);
exit(0);A
}
}
void proc_E()
{
proc_T();
proc_E1();
}
void proc_E1()
{
if(SYM=='+')
{
advance();
proc_E();
}
}
void proc_T()
{
proc_F();
proc_T1();
}
void proc_T1()
{
if(SYM=='('||SYM=='a'||SYM=='b'||SYM=='^')
proc_T();
}
void proc_F()
{
proc_P();
proc_F1();
}
void proc_F1()
{
if(SYM=='*')
{
advance();
proc_F1();
}
}
void proc_P()
{
if(SYM=='a'||SYM=='b'||SYM=='^')
advance();
else if(SYM=='(')
{
advance();
proc_E();
if(SYM==')')
advance();
else ERROR();
}
else ERROR();
}
void ERROR()
{
printf("The string is:");
printf("%s/n",buff);
printf("The match is not correct!/n");
fclose(fp);
exit(0);
}
void SUCCESS()
{
printf("The string is:");
printf("%s/n",buff);
printf("The match is successful!/n");
}
{
clrscr();
if((fp=fopen("string.txt","r"))==NULL)
{
printf("cannot open file!/n");
exit(0);
}
fread(buff,1,99,fp);
fseek(fp,0,0);
SYM=fgetc(fp);
proc_E();
fclose(fp);
}
void advance()
{
SYM=fgetc(fp);
if(SYM=='(') Left_p+=1;
if(SYM==')') Right_p+=1;
if(SYM!='('&&SYM!=')'&&SYM!='a'&&SYM!='b'&&SYM!='^'&&SYM!='+'&&SYM!='*'&&SYM!='#')
ERROR();
if(SYM=='#')
{
if(Left_p!=Right_p)
ERROR();
else SUCCESS();
fclose(fp);
exit(0);A
}
}
void proc_E()
{
proc_T();
proc_E1();
}
void proc_E1()
{
if(SYM=='+')
{
advance();
proc_E();
}
}
void proc_T()
{
proc_F();
proc_T1();
}
void proc_T1()
{
if(SYM=='('||SYM=='a'||SYM=='b'||SYM=='^')
proc_T();
}
void proc_F()
{
proc_P();
proc_F1();
}
void proc_F1()
{
if(SYM=='*')
{
advance();
proc_F1();
}
}
void proc_P()
{
if(SYM=='a'||SYM=='b'||SYM=='^')
advance();
else if(SYM=='(')
{
advance();
proc_E();
if(SYM==')')
advance();
else ERROR();
}
else ERROR();
}
void ERROR()
{
printf("The string is:");
printf("%s/n",buff);
printf("The match is not correct!/n");
fclose(fp);
exit(0);
}
void SUCCESS()
{
printf("The string is:");
printf("%s/n",buff);
printf("The match is successful!/n");
}