递归下降分析程序

实验一、递归下降分析实验

专业 商业软件  姓名 李嘉嘉 学号201506110247

一、 实验目的

     练习构造递归下降语法分析程序的方法,熟悉上下文无关文法的使用,加深对课堂教学的理解;提高语法分析方法的实践能力

二、 实验内容和要求

     利用c语言构造语法分析程序

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

  1. 原理分析及流程图

对于给定的文法:

E> a E’ 

E’—> = T

T> F F

F> ( F’) | F’

F’—> bK   

K> +F’ | -F’| ;

  1. 主要程序段及其解释:
#include<stdio.h>
#include<string.h>
char str[50];   //要分析的字符串
int ch=0;

       
void scaner();
void E();   
void E2();                    
void T();
void F();   
void F2();        
void K();
void error();

 

main()
{
    int len;
    printf("请输入算数表达式:");
    scanf("%s",str);
    len=strlen(str);
    str[len]='#';
    E();
    strcpy(str,"");
}

 

 

void scaner()
{
ch++;
}

 

void E()
{
    if(str[ch]=='a')
    {
scaner();
printf("E() ");
E2();
}
else error(); 
}

 

void E2()
{
    if(str[ch]=='=')
    {
printf("E2() ");
scaner();
T();
}
else error();
}

 

void T()
{
 printf("T() ");
     F();
     F2();
}

 

void F()
{
   if (str[ch]=='(')
    {     
    printf("F() ");
        scaner();
        F2();
        if(str[ch]==')')
        {
 scaner();
 F2();
        } 
    }
    else if(str[ch]=='b')
{
printf("F() ");
F2();
}
}

 

void F2()
{
   if(str[ch]=='b')
   {
    printf("F2() ");
    scaner();
   K();
   }
}

 

void K()
{
   if(str[ch]=='+'||str[ch]=='-')
   {
  printf("K() ");
  scaner();
   F2();
   }
   else if (str[ch]!=';')
   error();
   else if(str[ch]==';')
   printf("正确");
}

 

void error()
{
printf("
错误!
");
}

  

  1. 运行结果及分析

 

 

四、 实验总结

要清楚文法规则。

 

 

 

 

 

原文地址:https://www.cnblogs.com/veol/p/6188951.html