编译原理语法分析递归下降子程序实验报告.docVIP

  • 1335
  • 0
  • 约5.92千字
  • 约 18页
  • 2017-05-23 发布于贵州
  • 举报

编译原理语法分析递归下降子程序实验报告.doc

编译原理语法分析递归下降子程序实验报告

编译原理语法分析递归下降子程序实验报告 编译课程设计-递归下降语法分析 课程名称编译原理 设计题目 递归下降语法分析 一、 设计目的 通过设计、编制、调试一个具体的语法分析程序,加深对 语法分析原理的理解,加深对语法及语义分析原理的理解,并实现对文法的判断,是算符优先文法的对其进行FirstVT集及LastVT集的分析,并对输入的字符串进行规约输出规约结果成功或失败。 二、 设计内容及步骤 内容:在C++ 6.0中编写程序代码实现语法分析功能,调试得到相应文法的判断结果:是算符优先或不是。若是,则输出各非终结符的FirstVT与LastVT集的结果,还可进行字符串的规约,输出详细的规约步骤,程序自动判别规约成功与失败。 步骤:1.看书,找资料,了解语法分析器的工作过程与原理 2.分析题目,列出基本的设计思路 1定义栈,进栈,出栈函数 ○ 2栈为空时的处理 ○ 3构造函数判断文法是否是算符文法,算符优先文法 ○ 4构造FirstVT和LastVT函数对文法的非终结符进行分析 ○ 5是算符优先文法时,构造函数对其可以进行输入待规约 ○ 串,输出规约结果 ○6构造主函数,对过程进行分析 3.上机实践编码,将设计的思路转换成C++语言编码,编译运 行 4.测试,输入不同的文法,观察运行结果 详细的算法描述 详细设计伪代码如下: 首先要声明变量,然后定义各个函数 1.void Initstack(charstack amp;s) {//定义栈 s.base=new charLode[20]; s.top=-1; } 2. void push(charstack amp;s,charLode w) {//字符进栈 s.top++; s.base[s.top].E=w.E; s.base[s.top].e=w.e; } 3. void pop(charstack amp;s,charLode amp;w) {//字符出栈 w.E=s.base[s.top].E; 三、 w.e=s.base[s.top].e; s.top--; } 4. int IsEmpty(charstack s) {//判断栈是否为空 if(s.top==-1) return 1; else return 0; } 5.int IsLetter(char ch) {//判断是否为非终结符 if(ch=#39;A#39;amp;amp;ch=#39;Z#39;) return 1; else return 0; } 6.int judge1(int n) { //judge1是判断是否是算符文法:若产生式中含有两个相继的 非终结符则不是算符文法 } 7. void judge2(int n) {//judge2是判断文法G是否为算符优先文法:若不是算符文法或 若文法中含空字或终结符的优先级不唯一则不是算符优先文法 8.int search1(char r[],int kk,char a) { //search1是查看存放终结符的数组r中是否含有重复的终结符} 9.void createF(int n) { //createF函数是用F数组存放每个终结符与非终结符和组合, 并且值每队的标志位为0;F数组是一个结构体} 10.void search(charLode w) { //search函数是将在F数组中寻找到的终结符与非终结符对的 标志位值为1 } 分情况讨论://产生式的后选式的第一个字符就是终结符的情况 //产生式的后选式的第一个字符是非终结符的情况 11.void LastVT(int n) {//求LastVT } 12.void FirstVT(int n) {//求FirstVT } 13.void createYXB(int n) {//构造优先表 分情况讨论://优先级等于的情况,用1值表示等于} //优先级小于的情况,用2值表示小于 //优先级大于的情况,用3值表示大于 } 14.int judge3(char s,char a) {//judge3是用来返回在归约过程中两个非终结符相比较的值 } 15.void print(char s[],char STR[][20],int q,int u,int ii,int k) {//打印归约的过程} 16. void process(char STR[][20],int ii) {//对输入的字符串进行归约的过程 } 四、 设计结果 分两大类,四种不同的情况 第一类情况:产生式的候选式以终结符开始候选式以终结符开始经过存在递归式的非终结符后再以终结符结束 篇二:编译原理递归下降子程序 北华航天工业学院 《编译原理》课程实验报告 课程实验题目: 递归下降子程序实验 作者所在系部: 计算机科

文档评论(0)

1亿VIP精品文档

相关文档