- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
中南大学软件学院编译原理实验报告2
中南大学软件学院
编译原理
实验报告
实验:实验二
班级:
姓名:
学号:
实验二 预测分析法设计与实现
一、实验目的
加深对语法分析器工作过程的理解;加强对预测分析法实现语法分析程序的掌握;能够采用一种编程语言实现简单的语法分析程序;能够使用自己编写的分析程序对简单的程序段进行语法翻译。
二、实验内容
在实验1的基础上,用预测分析法编制语法分析程序,语法分析程序的实现可以采用任何一种编程语言和工具。
三、实验要求:
对语法规则有明确的定义;
编写的分析程序能够对实验一的结果进行正确的语法分析;
对于遇到的语法错误,能够做出简单的错误处理,给出简单的错误提示,保证顺利完成语法分析过程;
实验报告要求用文法的形式对语法定义做出详细说明,说明语法分析程序的工作过程,说明错误处理的实现。
四、实验步骤
定义目标语言的语法规则;
求解预测分析方法需要的符号集和分析表;
依次读入实验一的分析结果,根据预测分析的方法进行语法分析,直到源程序结束;
对遇到的语法错误做出错误处理。
设计思路和实现过程
本实验是使用LL(1)方法实现的语法分析器,我是用的是MFC实现的设计思路分为以下几步:
先读入输入串,判断输入串有没有语法错误,如有语法错误,提示第几个语法错误,退出;
将“或”语句拆开,如果有左递归,消除左递归;
判断可以产生空字符的非终结符,将其储存在一个数组中;
计算非终结符的first集,follow集;
计算select集;
创建预测分析表;
对照预测分析表对句子进行分析,输出每一步的操作。
错误处理
如果未输入文法,则提示输入文法;
如果文法有错误,既不是以类似于“S-”开头的,则提示错误发生在第几行;
如果文法不是LL(1)文法,程序会予以提示;
如果句子不是以“#”结尾的,或者句子中含有大写字母的,予以提示;
计算follow集时,如果follownumkey大于某个值,则可认定求follow集陷入死循环,即有右递归或间接右递归,此时跳出去,终止死循环。
关键代码
1、
void CGrammaanalysisDlg::OnChange()
{
int n=0;
UpdateData();
int i, nLineCount = m_gramma1.GetLineCount();//m_gramma是与edit控件关联的变量
CString strText;
// Dump every line of text of the edit control.
for (i=0; i nLineCount; i++) //检测每一句文法输入是否正确
{
// length of line i:
int len = m_gramma1.LineLength(m_gramma1.LineIndex(i));
m_gramma1.GetLine(i, strText.GetBuffer(len), len);
strText.ReleaseBuffer(len);
if(strText.IsEmpty())
break;
if(!getin(i,strText))//整理
return;
// MessageBox(strText);//输出得到的每行数据
}
m_gramma.Empty();
Delpare(); //消除左递归
deduce0_colec(); //将所有能推导出0的非终符放在数组colec0[30]中
Select_Collection(); //创建select集
Estab_preanatab(); //创建预测分析表
key=1;
}
2、
bool CGrammaanalysisDlg::getin(int i,CString strLine)//整理
{
char line_no = i+0;
if (!isupper(strLine[0])||strLine[1]!=-||strLine[2]!=)
{
CString error=The Syntax on line +(CString)line_no+ is wrong! please check and enter again:\n;
MessageBox(error);
return false;
}
else
{
int m=0;
for(int j=0;jstrLine.GetLength();j++)
{
if(strLine[j]!=|)
{
stotax[sto_tax][m++]=strLine[j];
continue;
}
e
您可能关注的文档
- 重大危险源安全监理实施细则5M.doc
- 数据检验与标准化.doc
- 20121224“礼物换换换 惊喜在圣诞”主题团队活动策划.docx
- 多种多样的豆制品.ppt
- 2013年普通高等学校招生全国统一考试(广东理科卷).doc
- 通信网络-80C152单片机在HDLC通信规程中的应用.pdf
- 让英语学习充满“生活味”.doc
- 2010年二级建造师《建设工程施工管理》精讲讲义.pdf
- 聊天室的设计与实现.doc
- 关于修建古城村人畜饮水工程项目建议书.doc
- 2026年及未来5年蓝信流量统计日志系统项目市场数据调查、监测研究报告.docx
- 2026年及未来5年多功能烟气分析仪项目市场数据调查、监测研究报告.docx
- 2026年及未来5年热熔焊制45°弯头项目市场数据调查、监测研究报告.docx
- 2025年学历类自考中国文化概论-中国当代文学作品选参考题库含答案解析.docx
- 2026年及未来5年微控双温区锑扩散系统项目市场数据调查、监测研究报告.docx
- 2026年及未来5年变频电机转子项目市场数据调查、监测研究报告.docx
- 2026年及未来5年数显压力机项目市场数据调查、监测研究报告.docx
- 2026年及未来5年电话十台灯十时钟项目市场数据调查、监测研究报告.docx
- 2026年及未来5年移动空调控制板项目市场数据调查、监测研究报告.docx
- 2026年及未来5年大豆纤维服饰项目市场数据调查、监测研究报告.docx
原创力文档


文档评论(0)