实验三 递归下降分析法

实验三递归下降分析程序实验

专业 商软2班   姓名 蓝海鹏  学号 201506110171

一、        实验目的

     编制一个使用递归下降分析法实现的语法分析程序。

二、        实验内容和要求

输入:正规式

输出:判断该正规式是否正确。

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

  1. 1.      源程序名:171-蓝海鹏.c

可执行程序名:171蓝海鹏.exe

  1. 2.      原理分析及流程图

  1. 3.      主要程序段:
 1 #include<stdio.h>
 2 #include<string.h>
 3 char Token[30];//存储输入的字符
 4 char sym;//记录下一个字符
 5 char s;//输入字符的传递
 6 static int p=0 ;//下一个字符的下标
 7 void S();
 8 void T();
 9 void U();
10 void scaner();//下一个字符
11 void error();//错误结束
12 main()
13 {
14     int i=-1;
15     printf("Please input :\n");
16     do
17     {
18         scanf("%c",&s);i++;
19
20         Token[i]=s;
21     }while(Token[i]!=‘#‘);
22     scaner();
23     S();
24     if(sym==‘#‘)
25         printf("Success!\n");
26     else
27         printf("fail!\n");
28 }
29
30 void scaner()
31 {
32     sym=Token[p];
33     p++;
34 }
35 void error()
36 {
37     printf("error!");
38 }
39 void S()
40 {
41     if(sym==‘a‘||sym==‘^‘)//如果是a或者是^
42         scaner();
43     else if(sym==‘(‘)
44     {
45         scaner();
46         T();
47         if(sym==‘)‘)
48             scaner();
49         else
50             error();
51     }
52 }
53 void T()
54 {
55     S();
56     U();
57 }
58
59 void U()
60 {
61     if(sym==‘,‘)
62     {
63         scaner();
64         S();
65         U();
66     }
67     else if(sym!=‘)‘)
68         error();
69 }
  1. 4.      运行结果及分析

四、        实验总结

通过这个递归下降分析程序,使我懂得了编译器在编译时候的过程。虽然我做出来了这个程序,但是C语言文法的递归下降分析程序有点难度,需要我在以后的时间去慢慢完成。我会在接下来的时间里慢慢去完成C语言文法的递归下降分析程序的。

时间: 2024-10-02 05:16:48

实验三 递归下降分析法的相关文章

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

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

实验三 递归下降分析程序实验

一.        实验目的      编制一个递归下降分析程序. 二.        实验内容和要求 输入:正规式 输出:判断该正规式是否正确. 三.        实验方法.步骤及结果测试    1.    源程序名:递归下降分析程序.c 可执行程序名:递归下降分析程序.exe   2. 3.主要程序段及其解释: #include<stdio.h> #include<string> char str[50]; int index=0; void E(); //E->TX;

递归下降分析法

实验三 递归下降分析法 实验三递归下降分析程序实验 专业 商软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)E->TG (2)G->+TG|—TG (3)G->ε, (4)T->FS (5)S->*FS|/FS (6)S->ε (7)F->(E) (8)F->i 答:文法太多,可先合并. (1)E->FSG (2)G->+TG|—TG|ε (3)S->*FS|/FS|ε (4)F->(E)|i 结合1,4 (1)E->ESG|iSG (2)G->+TG|—TG|

1216 递归下降分析法

/*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 */ #include<stdio.h> char sym; char LL1[1000]; int N=-1; void T(); void E(); void F(); void e(); void t(); void error();

编译原理 - 实验三 - 递归下降语法分析器的调试及扩展

一. 语法分析介绍 语法分析是编译过程的核心部分,它的主要任务是按照程序语言的语法规则,从由词法分析输出的源程序符号串中识别出各类语法成分,同时进行语法检查,为语义分析和代码生成做准备.执行语法分析任务的程序叫语法分析程序或语法分析器. 二. 所实现的语义分析和代码生成程序能处理什么语句 (1)简单变量的声明语句 (2)表达式语句 (3)if语句. (4)while语句 (5)for语句 (6)write语句 (7)read语句 (8)do语句. (9)处理过程调用和返回 三.实验过程 ①用VC

递归下降分析法--算数语法分析

#include<stdio.h>char curr;char LL1[1000];int N=-1; void T();void E();void F();void e();void t();void error();void scaner(); void main(){ char ch; int i=0; printf("请输入需要分析的curr语法:(以#结束)\n"); do{ scanf("%c",&ch); LL1[i] = ch;