12.30递归下降分析

  1 #include<stdio.h>
  2 #include<string.h>
  3 char str[10];
  4 int index=0;
  5 void E();            //E->TX;
  6 void X();            //X->+TX|-TX| e
  7 void T();            //T->FY
  8 void Y();            //Y->*FY |/fy| e
  9 void F();            //F->(E) | id
 10 int id();           //id
 11 int main()
 12 {
 13     int len;
 14     int m;
 15
 16         printf("请输入算数表达式:");
 17         scanf("%s",str);
 18         len=strlen(str);
 19         str[len]=‘#‘;
 20         str[len+1]=‘\0‘;
 21         E();
 22         printf("正确语句!\n");
 23         strcpy(str,"");
 24         index=0;
 25
 26     return 0;
 27 }
 28 void E()
 29 {
 30     T();
 31     X();
 32 }
 33 void X()
 34 {
 35     if(str[index]==‘+‘)
 36     {
 37         index++;
 38         T();
 39         X();
 40     }
 41     else if(str[index]==‘-‘)
 42     {
 43         index++;
 44         T();
 45         X();
 46     }
 47 }
 48 void T()
 49 {
 50     F();
 51     Y();
 52 }
 53 void Y()
 54 {
 55     if(str[index]==‘*‘)
 56     {
 57         index++;
 58         F();
 59         Y();
 60     }
 61     else if(str[index]==‘/‘)
 62     {
 63         index++;
 64         F();
 65         Y();
 66     }
 67 }
 68 void F()
 69 {
 70     if(id())
 71     {
 72         index++;
 73     }
 74     else if (str[index]==‘(‘)
 75     {
 76         index++;
 77         E();
 78         if(str[index]==‘)‘)
 79         {
 80             index++;
 81         }else{
 82             printf("\n分析失败!\n");
 83             exit (0);
 84         }
 85     }
 86     else{
 87         printf("分析失败!\n");
 88         exit(0);
 89     }
 90  }
 91 int id()
 92 {
 93      if(str[index]>=‘0‘&&str[index]<=‘9‘)
 94     {
 95         while( str[index+1]>=‘0‘&&str[index+1]<=‘9‘ )
 96         {
 97             index++;
 98         }
 99         if(str[index+1]>=‘a‘&&str[index+1]<=‘z‘ )
100             return 0;
101
102         return 1;
103     }
104      else if(str[index]>=‘a‘&&str[index]<=‘z‘ )
105      {
106          return 1;
107      }
108      else
109          return 0;
110
111 }
时间: 2024-08-24 15:36:58

12.30递归下降分析的相关文章

实验三 递归下降分析法

实验三递归下降分析程序实验 专业 商软2班   姓名 蓝海鹏  学号 201506110171 一.        实验目的      编制一个使用递归下降分析法实现的语法分析程序. 二.        实验内容和要求 输入:正规式 输出:判断该正规式是否正确. 三.        实验方法.步骤及结果测试 1.      源程序名:171-蓝海鹏.c 可执行程序名:171蓝海鹏.exe 2.      原理分析及流程图 3.      主要程序段: 1 #include<stdio.h> 2

递归下降分析法

实验三 递归下降分析法 实验三递归下降分析程序实验 专业 商软2班   姓名 李文辉  学号 201506110168 一.        实验目的      编制一个使用递归下降分析法实现的语法分析程序. 二.        实验内容和要求 输入:正规式 输出:判断该正规式是否正确. 三.        实验方法.步骤及结果测试 1.      源程序名:168-李文辉.c 可执行程序名:168李文辉.exe 2.      原理分析及流程图 3.      主要程序段: 1 #include

软件构造——递归下降分析法

[实验目的] (1)掌握自上而下语法分析的要求与特点. (2)掌握递归下降语法分析的基本原理和方法. (3)掌握相应数据结构的设计方法. [实验内容] 用递归下降法编写一个语法分析程序,使之与词法分析器结合,能够根据语言的上下文无关文法,识别输入的单词序列是否文法的句子. [实验要求] 对下列文法,用递归下降分析法对任意输入的符号串进行分析: E->TG    G->+TG|-TG   G->ε T->FS    S->*FS|/FS    S->ε F->(E)

【龙书笔记】用Python实现一个简单数学表达式从中缀到后缀语法的翻译器(采用递归下降分析法)

上篇笔记介绍了语法分析相关的一些基础概念,本篇笔记根据龙书第2.5节的内容实现一个针对简单表达式的后缀式语法翻译器Demo. 备注:原书中的demo是java实例,我给出的将是逻辑一致的Python版本的实现. 在简单后缀翻译器代码实现之前,还需要介绍几个基本概念. 1. 自顶向下分析法(top-down parsing) 顾名思义,top-down分析法的思路是推导产生式时,以产生式开始符号作为root节点,从上至下依次构建其子节点,最终构造出语法分析树.在具体实现时,它会把输入字符串从左到右

软件构造实验三-递归下降分析分析法

[实验目的] (1)掌握自上而下语法分析的要求与特点. (2)掌握递归下降语法分析的基本原理和方法. (3)掌握相应数据结构的设计方法. [实验内容] 用递归下降法编写一个语法分析程序,使之与词法分析器结合,能够根据语言的上下文无关文法,识别输入的单词序列是否文法的句子. [实验要求] 对下列文法,用递归下降分析法对任意输入的符号串进行分析: E->TG    G->+TG|-TG   G->ε T->FS    S->*FS|/FS    S->ε F->(E)

递归下降分析程序

一.      实验目的 编制一个递归下降分析程序 LL(1)文法: E->TE1 E1->+TE1|-TE1|∑ T->FT1; T1->*FT1|/FT1|∑ F->(E)|i|1 二.      实验内容和要求 输入:LL(1)文法 判断:每遇到一个终结符,则判断当前读入的单词符号是否与该终结符相匹配,若匹配,则继续读取下一个单词符号,若不匹配,则进行错误处理. 每遇到一个非终结符,则调用相应的分析子程序 一.      实验方法.步骤及结果测试   1.   源程序名

用递归下降分析求表达式的值

<数据结构>中表达式求值的经典算法是用两个栈,一个存数字,一个存运算符.依次读入表达式中的每个字符,若是数字则进数字栈,若是运算符则和运算符栈的栈顶运算符比较优先权作相应操作,直至整个表达式求值完毕.运算符的优先级表如下   + - * / ( ) # + > > < < < > > - > > < < < > > * > > > > < > > / > >

203-陈冠权-递归下降分析

递归下降分析: 对于给定的文法G[E] : E→E+T|E-T|T T→T*F| T/F|F F→(E)|i 消除左递归后的文法是: E→TE' E'→+TE'|-TE'|∑ T→FT' T'→*FT'|/FT'|∑ F→(E)|i 是否是LL(1)文法? select(E→TE')=first(TE')={(,i} select(E'→+TE')=first(+TE')={+} select(E'→-TE')=first(-TE')={-} select(E'→∑)=follow(E')={)

递归下降分析程序报告

实验一.递归下降分析程序实验 专业 商业软件工程   姓名 姓名 学号 201506110148 一.        实验目的   编译递归下降分析程序识别c语言文法 二.        实验内容和要求 简单写出c语言文法 分析c语言文法是否为LL1文法,若不是,修改成LL1文法. 编写程序实现对c语言LL1文法判断是否有语法错误 三.        实验方法.步骤及结果测试  1.      源程序名:递归下降分析程序 源程序名递归下降分析程序.c 可执行程序名:递归下降分析程序.exe 2.