编译原理-递归下降分析法 c程序部分的分析

实验三 语法分析程序实验

专业 商软2班   姓名 黄仲浩  学号 201506110166

一、 实验目的

     编制一个部分文法分析程序。

二、 实验内容和要求

     输入:源程序字符串

     输出:正确或者错误

三、 实验方法、步骤及结果测试

  1. 源程序名:递归下降分析.c

可执行程序名:递归下降分析.c

  1. 原理分析及流程图

    

#include<stdio.h>
#include<string.h>
char Token[30];//存储输入的字符
char sym;//记录下一个字符
char s;//输入字符的传递
static int p=0 ;//下一个字符的下标
void S();
void T();
void U();
void scaner();//下一个字符
void error();//错误结束
//以此文法为基础作此程序
//S->a|^|(T)
//T->SU
//U->,SU|$
int main()
{
    int i=-1;
    printf("Please input :
");
  do
    {
      
      scanf("%c",&s);i++;
      Token[i]=s;
      
    }while(Token[i]!='#');
 scaner();
 S();
     if(sym=='#')
         printf("Success!
");
     else
         printf("fail!
");
 return 0 ;

}
void scaner()
{
    sym=Token[p];
    p++;
}
void error()
{
    printf("error!");
}
void S()
{
  if(sym=='a'||sym=='^')//如果是a或者是^
      scaner();
  else if(sym=='(')
  {
      scaner();
      T();
      if(sym==')')
          scaner();
      else
          error();
  }
}
void T()
{
  S();
  U();
}
void U()
{
  if(sym==',')
  {
    scaner();
    S();
    U();
  }
  else if(sym!=')')
      error();
}
  1. 主要程序段及其解释:

     S().T().U()//只是分析c语言的部分

     scaner()//进行下一个字符的记录

     error()//结束的标志

  1. 运行结果及分析

 

四、 实验总结

此程序只是以部分为主做出来,是为了慢慢地做好全部c语言的分析。我会慢慢以此思考LL(1)文法来进行最终的文法改写分析。

 

 

原文地址:https://www.cnblogs.com/qazwsx833/p/6187224.html