递归下降分析程序

编译原理:

#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();
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");
}

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值