编译原理实验报告(语法分析器).docx
- 文档编号:167762
- 上传时间:2022-10-05
- 格式:DOCX
- 页数:13
- 大小:52.16KB
编译原理实验报告(语法分析器).docx
《编译原理实验报告(语法分析器).docx》由会员分享,可在线阅读,更多相关《编译原理实验报告(语法分析器).docx(13页珍藏版)》请在冰豆网上搜索。
.
编译原理实验
专业:
13级网络工程
Word资料
语法分析器1
一、实现方法描述
所给文法为G【E】;E->TE’
E’->+TE’|空
T->FT’
T’->*FT’|空F->i|(E)
递归子程序法:
首先计算出五个非终结符的first集合follow集,然后根据五个产生式定义了五个函数。
定义字符数组vocabulary来存储输入的句子,字符指针ch指向vocabulary。
从非终结符E函数出发,如果首字符属于E的first集,则依次进入T函数和E’函数,开始递归调用。
在每个函数中,都要判断指针所指字符是否属于该非终结符的first集,属于则根据产生式进入下一个函数进行调用,若first集中有空字符,还要判断是否属于该非终结符的follow集。
以分号作为结束符。
二、实现代码
头文件shiyan3.h
#include
#include
charvocabulary[num];char*ch;
voidjudge_E();voidjudge_EE();voidjudge_T();voidjudge_TT();voidjudge_F();
源文件#include"shiyan3.h"voidjudge_E()
{
if(*ch==';')
{
cout<<"该句子符合此文法!
"< inta=0; cout<<"按1结束程序"< if(a==1) exit(0); } else if(*ch=='('||*ch=='i') { judge_T();judge_EE(); } else { cout<<"该句子不匹配此文法! "< cout<<"按1结束程序"< if(a==1)exit(0); } } voidjudge_EE() { if(*ch==';') { cout<<"该句子符合此文法! "< cout<<"按1结束程序"< if(a==1) exit(0); } if(*ch=='+') { ch++;judge_T();judge_EE(); } else if(*ch=='#'||*ch==')')return; else { cout<<"该句子不匹配此文法! "< cout<<"按1结束程序"< if(a==1)exit(0); } } voidjudge_T() { if(*ch==';') { cout<<"该句子符合此文法! "< cout<<"按1结束程序"< if(a==1) exit(0); } if(*ch=='('||*ch=='i') { judge_F();judge_TT(); } else { cout<<"该句子不匹配此文法! "< cout<<"按1结束程序"< if(a==1) exit(0); } } voidjudge_TT() { if(*ch==';') { cout<<"该句子符合此文法! "< cout<<"按1结束程序"< cin>>a;if(a==1) exit(0); } if(*ch=='*') { ch++;judge_F();judge_TT(); } else if(*ch==')'||*ch=='+'||*ch=='#')return; else { cout<<"该句子不匹配此文法! "< cout<<"按1结束程序"< if(a==1)exit(0); } } voidjudge_F() { if(*ch==';') { cout<<"该句子符合此文法! "< cout<<"按1结束程序"< if(a==1) exit(0); } if(*ch=='(') { ch++;judge_E();if(*ch==')') { ch++; } else { cout<<"该句子不匹配此文法! "< cout<<"按1结束程序"< if(a==1)exit(0); } } else if(*ch=='i') { ch++; //cout<<*ch; } else { cout<<"该句子不匹配此文法! "< cout<<"按1结束程序"< if(a==1)exit(0); } } voidmain() { //char*ch;cout<<"*******************欢**迎* ************************"< 使用语法分析器 cout<<"请输入一个句子: "< judge_E();cout< cout<<"*********************结**束*使用,再见! **************************"< } 三、运行结果 四、心得体会 此次实验使用的是递归子程序法,用这个方法最大的问题就是函数里的递归调用,一不小心就把人绕糊涂了。 所以在写的时候注意力需十分集中。 虽然在函数的实际调用过程中比较复杂,但是只要理清思路,在编写代码时,根据产生式来判断调用,每个部分都相对简单一点。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 实验 报告 语法 分析器
![提示](https://static.bdocx.com/images/bang_tan.gif)