编译原理实验(Tiny+语法分析)
TINY+语言的语法分析软件提供Window界面,用户可以点击【打开】按钮打开或者在编辑框中输入一个扩展Tiny+语言源程序;通过【打印语法树】复选按钮可以选择在分析结果中打印语法树,【语法分析】按钮提供Tiny语言词法分析功能,对源程序进行语法分析后在内存中生成语法树,并将分析结果显示在编辑框中;【文件另存为】按钮可以保存文件。
TINY+语言的语法分析软件
软件设计说明文档
院系 计算机学院 专业 计算机科学与技术 年级 2008级 班级 2班 姓名 张俊发 学号实验名称 综合利用多媒体制作网站或者应用程序 实验时间 5月1日至25 日 指导老师及职称 黄煜廉
TINY+语言的语法分析软件提供Window界面,用户可以点击【打开】按钮打开或者在编辑框中输入一个扩展Tiny+语言源程序;通过【打印语法树】复选按钮可以选择在分析结果中打印语法树,【语法分析】按钮提供Tiny语言词法分析功能,对源程序进行语法分析后在内存中生成语法树,并将分析结果显示在编辑框中;【文件另存为】按钮可以保存文件。
1.总体描述
1.1总体功能概述
TINY+语言的语法分析软件提供Window界面,用户可以点击【打开】按钮打开或者在编辑框中输入一个扩展Tiny+语言源程序;通过【打印语法树】复选按钮可以选择在分析结果中打印语法树,【语法分析】按钮提供Tiny语言词法分析功能,对源程序进行语法分析后在内存中生成语法树,并将分析结果显示在编辑框中;【文件另存为】按钮可以保存文件。
1.2设计目标
设计目标:
(1) 扩充的语法规则有:
While-stmt --> while exp do stmt-sequence endwhile Dowhile-stmt-->do stmt-sequence while exp
for-stmt-->for identifier:=simple-exp to simple-exp do stmt-sequence enddo 步长递增1
for-stmt-->for identifier:=simple-exp downto simple-exp do stmt-sequence enddo 步长递减1
软件能对Tiny+语言源程序进行语法分析并生成语法树。
TINY+语言的语法分析软件提供Window界面,用户可以点击【打开】按钮打开或者在编辑框中输入一个扩展Tiny+语言源程序;通过【打印语法树】复选按钮可以选择在分析结果中打印语法树,【语法分析】按钮提供Tiny语言词法分析功能,对源程序进行语法分析后在内存中生成语法树,并将分析结果显示在编辑框中;【文件另存为】按钮可以保存文件。
(1)要提供一个源程序编辑界面,以让用户输入源程序(可保存、打开源程序)
(2)可由用户选择是否生成语法树,并可查看所生成的语法树。
1.3 软件总体结构
本软件包括下面3个功能模块:词法分析功能模块;语法分析功能模块; 文本编辑模块;
TINY+语言的语法分析软件提供Window界面,用户可以点击【打开】按钮打开或者在编辑框中输入一个扩展Tiny+语言源程序;通过【打印语法树】复选按钮可以选择在分析结果中打印语法树,【语法分析】按钮提供Tiny语言词法分析功能,对源程序进行语法分析后在内存中生成语法树,并将分析结果显示在编辑框中;【文件另存为】按钮可以保存文件。
2.软件功能设计
2.1 软件功能界面:
2.2词法分析模块功能设计 2.2.1 功能描述
对输入源程序进行扫描,识别Tiny+记号。
TINY+语言的语法分析软件提供Window界面,用户可以点击【打开】按钮打开或者在编辑框中输入一个扩展Tiny+语言源程序;通过【打印语法树】复选按钮可以选择在分析结果中打印语法树,【语法分析】按钮提供Tiny语言词法分析功能,对源程序进行语法分析后在内存中生成语法树,并将分析结果显示在编辑框中;【文件另存为】按钮可以保存文件。
2.2.2功能设计
Tiny+语言扫描程序DFA图如下:
2.2.3代码实现
Scan:这部分的功能的核心函数是 getToken()函数。
MyTokenType Scan::getToken(void) {
int tokenStringIndex = 0; MyTokenType currentToken; StateType state = START; int save;
while(state!=DONE){ int c = getNextChar(); save = TRUE; switch(state){ case START: if ( isdigit(c) ) state = INNUM; else if ( isalpha(c) ) state = INID; else if ( c == ':' ) state = INASSIGN;
TINY+语言的语法分析软件提供Window界面,用户可以点击【打开】按钮打开或者在编辑框中输入一个扩展Tiny+语言源程序;通过【打印语法树】复选按钮可以选择在分析结果中打印语法树,【语法分析】按钮提供Tiny语言词法分析功能,对源程序进行语法分析后在内存中生成语法树,并将分析结果显示在编辑框中;【文件另存为】按钮可以保存文件。
else if (c == '{'){ save = FALSE; state = INCOMMENT; }else{ state=DONE; switch(c){ case EOF:save = FALSE;currentToken = MYENDFILE;break; case '=':currentToken = EQ;break; case '<':currentToken = LT;break; case '+':currentToken = PLUS;break; case '-':currentToken = MINUS;break; case '*':currentToken = TIMES;break; case '/':currentToken = OVER;break; case '%':currentToken = MOD;break; case '(':currentToken = LPAREN;break; case ')':currentToken = RPAREN;break; case ';':currentToken = SEMI;break; default:currentToken = MYERROR;break; } }break;
case INCOMMENT:save = FALSE; if (c == EOF){ state = DONE; currentToken = MYENDFILE; }else if (c == '}') state = START; break;
case INASSIGN:state = DONE; if (c == '=') currentToken = ASSIGN; else{ /* backup in the input */ ungetNextChar(); save = FALSE; currentToken = MYERROR; }break;
case INNUM:if (!isdigit(c)){ /* backup in the input */ ungetNextChar(); save = FALSE; state = DONE; currentToken = NUM; }break;
case INID:if (!isalpha(c)){ /* backup in the input */ ungetNextChar(); save = FALSE; state = DONE; currentToken = ID;
TINY+语言的语法分析软件提供Window界面,用户可以点击【打开】按钮打开或者在编辑框中输入一个扩展Tiny+语言源程序;通过【打印语法树】复选按钮可以选择在分析结果中打印语法树,【语法分析】按钮提供Tiny语言词法分析功能,对源程序进行语法分析后在内存中生成语法树,并将分析结果显示在编辑框中;【文件另存为】按钮可以保存文件。
}
case DONE: default: /* should never happen */ fprintf(listing,"Scanner Bug: state= %d\n",state); state = DONE; currentToken = MYERROR;break; } if ((save) && (tokenStringIndex <= MAXTOKENLEN)) tokenString[tokenStringIndex++] = (char) c; if (state == DONE){ tokenString[tokenStringIndex] = '\0'; if (currentToken == ID) currentToken = reservedLookup(tokenString);} }
fprintf(listing,"\t%d: ",lineno); printT …… 此处隐藏:3648字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [高等教育]一年级家长课程教案
- [高等教育]封丘县人民医院深入推进纠正医药购销领
- [高等教育]2017年6月大学英语四级真题试卷及答案(
- [高等教育]2017年北京第二外国语学院文学院824中
- [高等教育]7 高中历史第7单元1861年俄国农奴制改
- [高等教育]【K12学习】4、实际测量-苏教版六年级
- [高等教育]药具培训试卷题库及部分参考答案
- [高等教育]本土电子元器件目录分销商如何赢得生意
- [高等教育]七年级岭南版美术教案
- [高等教育]书作文之书法活动通讯稿
- [高等教育]Endnote X 软件使用入门和用法总结(LS)
- [高等教育]嵌入式系统的现状及发展状况
- [高等教育]2012抗菌药物专项整治活动方案解读
- [高等教育]人教版新课本一年级数学下册期末试卷
- [高等教育]爱课程民法学观后感
- [高等教育]930机组使用说明书1
- [高等教育]煤气设备设施点检标准
- [高等教育]常见室内观叶植物图解
- [高等教育]312党员群众路线心得体会
- [高等教育]小学信息(苗版)第一册全册教案
- 在市---局2010党建大会上的讲话
- 《科哲》提纲及补充阅读材料(2010.7)
- 苏州高博软件技术职业学院论文开题报告
- 兼职导游管理的困境及对策探讨
- 基于通用设计理念的现代厨房产品语义研
- 康乐一中2010年至2011年度鼓号队、花束
- 第10章_数据收集整理与描述_期末复习课
- 2008年黑龙江林甸商贸购物中心营销策划
- 水硬度的测定实验报告
- 五分钟教你拍摄夜景光绘照
- 2014年临床妇产科三基三严试题及答案
- 0第二课 纾解压力第一站了解压力
- 解析建筑工程电气设备安装施工技术要点
- 地方性应用型本科高校“双师型”师资队
- 高考语文专题复习课件:小说阅读指导
- 装饰工程投标书2
- 大学生就业难问题探讨及对策
- English and Its History
- 青岛市城市房屋修缮工程质量监督管理办
- 初中英语形容词和副词的用法和练习题




