资源描述
-! 编译原理实验报告 ————表达式语法分析表达式语法分析 -! 表达式语法分析实验报告 一、实验题目 设计一个简单的表达式语法分析器 (采用递归下降方法设计实现) 二、实验目的 1、 了解形式语言基础及其文法运算; 2、 熟悉语法分析原理及 4 种常用的语法分析方法; 其中: 四种算法为 (1)设计算术表达式的递归下降子程序分析算法 (2)设计算术表达式的 LL(1) 分析算法 (3)设计算术表达式的简单优先分析算法 (4)设计算术表达式的 SLR(1) 分析算法 3、选择上述一种方法并设计一个表达式的语法分析器。 (本实验设计的是递归下降的表达式语法分析器) 三、实验内容 1.设计递归下降语法分析器算法; 2.编写代码并上机调试运行通过; 3、写出试验体会及心得。 -! 四、实验要求 1、给出算术表达式文法 2、进行适当的文法变换 3、选择一种语法分析的方法,并说明其原理 4、根据原理给出相应的算法设计,说明主要的数据结构并画出算法流 程图 5、编写代码并上机调试运行通过 6、写出程序运行结果 7、写出相应的文档以及代码注释 8、输入——表达式; 输出——表达式语法是否正确。 五、递归下降的表达式语法分析器设计概要 1.算术表达式文法.算术表达式文法 G(E): E E +T | T T T* F | F F i | (E) 2 2.文法变换:.文法变换: G’(E): E->TE E->+TE|ε T->FT T->*FT|ε F->(E)|I -! 3. 递归下降子程序框图:递归下降子程序框图: 六、实验设计源程序 -! #include char inputstream[50]; //存储输入句子存储输入句子 int temp=0; //数组下标数组下标 int right; //判断输出信息判断输出信息 void e(); void e1(); void t(); void t1(); void f(); void main() { right=1; cout<<"请输入您要分析的字符串以请输入您要分析的字符串以#结束结束(^为空字符为空字符)::"<>inputstream; e(); if((inputstream[temp]==#) else cout<<"分析失败分析失败"<:m=0; token[m++]=ch; ch=prog[p++]; if(ch===) {syn=24; token[m++]=ch; } else {syn=23; p--; break; } break; case:: m=0; token[m++]=ch; ch=prog[p++]; if(ch===) {syn=18; token[m++]=ch; } else -! {syn=17; p--; } break; case+:syn=13;token[0]=ch;break; case-:syn=14;token[0]=ch;break; case*:syn=15;token[0]=ch;break; case/:syn=16;token[0]=ch;break; case=:syn=25;token[0]=ch;break; case;:syn=26;token[0]=ch;break; case(:syn=27;token[0]=ch;break; case):syn=28;token[0]=ch;break; case#:syn=0;token[0]=ch;break; default:syn=-1; } return syn; } 八、运行结果 1 1、输入错误时的情况:、输入错误时的情况: 2 2、输入正确时的情况:、输入正确时的情况: -! 九、实验体会 通过此次实验,让我了解到如何设计、编写并调试语义分析部分的相关 程序,并加深对语义分析原理的理解;熟悉了构造语义分析程序的手工方式 的相关原理,使用某种高级语言直接编写此法分析程序。 另外,通过本次实验,也让我重新熟悉了 C 语言的相关内容,加深了 对 C 语言知识的深化和用途的理解。通过这次语义分析的实验, 我对高级语 言的学习有了更深的认识 ,了解得更透彻。我了解了高级语言转化为目标 代码或汇编指令的过程,。对今后的学习将起很大的作用,对以后的编程有很 大的帮助. 本次实验虽然只是完成了一个简单的程序,并且程序的主要框架 课本上有给出,但在组织程序结构和深入了确上学到了很多,加深对编译原 理的理解,掌握编译程序的实现方法和技术。巩固了前面所学的知识。
展开阅读全文
相关搜索