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

#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;
i++;
}while(ch != ‘#‘);
scaner();
E();
if(curr == ‘#‘)
printf("成功!\n");
else{
printf("文法有误!!\n");
error();
}

}

void scaner(){ //用于读取源函数的下一个字符

N++;
if(LL1[N] == ‘ ‘){
N++;
}else{
curr = LL1[N];
}
}

void E(){
T();
e();
}
void T(){
F();
t();
}

void e(){
if(curr == ‘+‘){
scaner();
T();
e();
}
else if(curr == ‘-‘){
scaner();
T();
e();
}else if(LL1[N+1] == ‘#‘ || LL1[N+1] == ‘+‘ || LL1[N+1] == ‘/‘ || LL1[N+1] == ‘*‘ || LL1[N+1] == ‘-‘){
if(LL1[N] != ‘(‘ && LL1[N] != ‘)‘)
error();
}
}

void t(){
if(curr == ‘*‘){
scaner();
F();
T();
}else if(curr == ‘/‘){
scaner();
F();
T();
}else if(LL1[N+1] == ‘#‘ || LL1[N+1] == ‘+‘ || LL1[N+1] == ‘/‘ || LL1[N+1] == ‘*‘ || LL1[N+1] == ‘-‘){
if(LL1[N] != ‘(‘ && LL1[N] != ‘)‘)
error();
}
}
//LIE ZHI HUA TI GONG TAI MA
void F(){
if(curr == ‘(‘){
scaner();
E();
if(curr == ‘)‘){
scaner();
// printf("111111");
}else{
error();
}
}else{
//判断是否是函数或者是数字
//error();
while(1){
if(curr >= ‘a‘ && curr<=‘z‘ || curr >= ‘A‘ && curr <= ‘Z‘ || curr >= ‘0‘ && curr <= ‘9‘){
scaner();
}else{
break;
}
}
}
}

void error(){
printf("%d %c之后的文法有错!\n",N,curr);
}

时间: 2024-10-16 08:11:15

递归下降分析法--算数语法分析的相关文章

实验三 递归下降分析法

实验三递归下降分析程序实验 专业 商软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

【龙书笔记】用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)

编译原理-递归下降分析法

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

递归下降分析实验报告

                                                                      实验四:语法分析实验 一.        实验目的   编写递归下降分析语法分析程序. 二.        实验内容和要求 输入:输入算术表达式以"#"结束 输出:是否分析成功 三.        实验方法.步骤及结果测试  1.      源程序名:压缩包文件(rar或zip)中源程序名 语法分析.c 可执行程序名:语法分析.exe 2.    

递归下降分析-实验报告

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