编译原理实验语法分析器报告Word文件下载.docx
- 文档编号:8138412
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:15
- 大小:138.90KB
编译原理实验语法分析器报告Word文件下载.docx
《编译原理实验语法分析器报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《编译原理实验语法分析器报告Word文件下载.docx(15页珍藏版)》请在冰点文库上搜索。
5、借助语法分析,设计一个表达式的判断分析器,即从键盘上输入算术表达式,分析器将显示该表达式的正确与否。
原
理
(
算
法
流
程
)
实验算法流程图如下所示:
序
界
面
效
果
图
实验结果界面:
只选择几个典型的例子进行分析,可进行任意表达式输入。
1)未进行语法分析时的界面;
2)输入正确的表达式(1+2)*(6-3)+1进行语法分析时的界面结果;
3)输入错误的表达式1*2+(2+3并进行语法分析时的界面结果;
4)输入错误的表达式1+(+5+6)并进行语法分析时的界面结果;
代
码
#include"
stdafx.h"
grammer.h"
mfc_语法分析器.h"
mfc_语法分析器Dlg.h"
intflag;
inti,j;
intlength;
CStringstring;
intgrammer(CStringstr)
{
i=0;
flag=0;
charch[MAX];
length=str.GetLength();
strcpy(ch,str);
if(length!
=0)
{
F(ch);
if(flag==0)
{
MessageBox(NULL,"
输入表达式符合文法"
"
正确"
MB_OK|MB_ICONINFORMATION);
}
//str=ch;
//returnflag;
}
else
MessageBox(NULL,"
表达式为空"
提示"
MB_OK|MB_ICONWARNING);
//MessageBox(NULL,"
MB_OK|MB_ICONERROR);
return-1;
returnflag;
}
voidF(charch[])
if(ch[0]=='
+'
MessageBox(NULL,"
输入表达式不符合文法0"
错误"
开始处多了+"
flag=1;
else
if(ch[0]=='
-'
flag=0;
开始处多了-"
flag=1;
*'
开始处多了*"
/'
开始处多了/"
)'
开始处多了)"
}/*上述为对第一个字符的特殊处理*/
if(ch[i]!
=NULL)
if(ch[i]=='
('
{
i++;
F(ch);
if(ch[i]!
='
{
if(flag==0)
{
MessageBox(NULL,"
输入表达式不符合文法1"
少了'
"
}
flag=1;
}
else
i++;
if(ch[i]!
T(ch);
}
else
if(ch[i]<
9'
&
ch[i]>
0'
while(ch[i]<
T(ch);
if(flag==0)
=NULL&
ch[i]!
MessageBox(NULL,"
输入表达式不符合文法2.1"
if(ch[i]=='
'
)MessageBox(NULL,"
含有空格"
elseif(ch[i]=='
){MessageBox(NULL,"
多了'
号"
elseif(ch[i]==NULL)
输入表达式不符合文法2.2"
if(ch[i-1]=='
elseif(ch[i-1]=='
多了最后的'
elseif(ch[i]!
ch[i]=='
输入表达式不符合文法2.3"
含有一对空括号"
voidT(charch[])
if(ch[i]=='
||ch[i]=='
i++;
F(ch);
else
MessageBox(NULL,"
输入表达式不符合文法3"
elseif(ch[i]=='
E(ch);
voidE(charch[])
{
输入表达式不符合文法4.1"
)MessageBox(NULL,"
输入表达式不符合文法4.2"
elseif(ch[i]!
if(flag==0)
输入表达式不符合文法5"
ch[i+2]=='
含有一对多余的括号"
elseMessageBox(NULL,"
其他类型的错误"
flag=1;
结
分
析
及
心
得
体
会
实验结果分析:
本次实验借助语法分析,设计一个表达式的判断分析器,从键盘上输入算术表达式,分析器对该表达式的正确与否进行分析。
若是正确的算术表达式,则符合文法,输出正确;
若是错误的算术表达式,则表达式不符合文法,输出其错误之处并显示异常。
该程序执行过程无误,输出结果正常。
但由于我们的疏忽,该程序未能完全满足实验要求,并不能够构造其LR分析表,并不是由该分析表驱动的语法分析器程序,这是本次实验的一个缺陷。
心得体会:
通过本次实验让我们了解到了如何进行设计,编制并调试语法分析程序,掌握语法分析器生成工具的使用和了解编译器的设计。
也加深对语法分析原理的理解,熟悉了构造语法分析程序的相关原理和使用高级语言直接编写此次语法分析程序的方法。
在此次实验中,我们也了解到了进行实验必须具备的严谨性和准确性,也懂得了团结合作的重要,这为我们将来的编写程序提供了宝贵经验。
成
绩
评
定
教师签名:
年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 实验 语法 分析器 报告