编译原理实验(Tiny+语法分析)
更新时间:2023-08-25 12:34:01 阅读量: 教育文库 文档下载
- 编译原理实验一 词法分析推荐度:
- 相关推荐
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); printToken(currentToken); return currentToken;
2.3词法分析模块功能设计 2.3.1 功能描述
TINY+语言文法:
program --> stmt-sequence
stmt-sequence --> statement {;statement}
statement --> if-stmt|repeat-stmt|assign-stmt|read-stmt|write-stmt |While-stmt|Dowhile-stmt|for-stmt
if-stmt --> if exp then stmt-sequence [else stmt-sequence] end repeat-stmt --> repeat stmt-sequence until exp assign-stmt --> identifier := exp read-stmt --> read identifier write-stmt --> write exp
exp --> simple-exp [ comparison-op simple-exp ] comparison-op --> < | =
simple-exp --> term { addop term } addop --> + | -
term --> factor { mulop factor } mulop --> * | / | %
factor --> (exp) | number | identifier
While-stmt --> while exp do stmt-sequence endwhile Dowhile-stmt --> do stmt-sequence while exp
for-stmt --> for identifier := simple-exp for-choose' for-choose' --> to simple-exp do stmt-sequence enddo for-choose' --> downto simple-exp do stmt-sequence enddo
TINY+语言的语法分析软件提供Window界面,用户可以点击【打开】按钮打开或者在编辑框中输入一个扩展Tiny+语言源程序;通过【打印语法树】复选按钮可以选择在分析结果中打印语法树,【语法分析】按钮提供Tiny语言词法分析功能,对源程序进行语法分析后在内存中生成语法树,并将分析结果显示在编辑框中;【文件另存为】按钮可以保存文件。
根据Tiny+文法对输入的Tiny+源程序进行语法分析,并生成语法树。
2.3.2功能设计
Tiny+语言语法图如下:
TINY+语言的语法分析软件提供Window界面,用户可以点击【打开】按钮打开或者在编辑框中输入一个扩展Tiny+语言源程序;通过【打印语法树】复选按钮可以选择在分析结果中打印语法树,【语法分析】按钮提供Tiny语言词法分析功能,对源程序进行语法分析后在内存中生成语法树,并将分析结果显示在编辑框中;【文件另存为】按钮可以保存文件。
2.2.3代码实现
TINY+语言的语法分析软件提供Window界面,用户可以点击【打开】按钮打开或者在编辑框中输入一个扩展Tiny+语言源程序;通过【打印语法树】复选按钮可以选择在分析结果中打印语法树,【语法分析】按钮提供Tiny语言词法分析功能,对源程序进行语法分析后在内存中生成语法树,并将分析结果显示在编辑框中;【文件另存为】按钮可以保存文件。
扩充文法实现:
TreeNode * Parse::while_stmt(void) { TreeNode * t=newStmtNode(WhileK); match(WHILE); if(t!=NULL)t->child [0]=exp(); match(DO); if(t!=NULL)t->child [1]=stmt_sequence(); match(ENDWHILE); return t; }
TreeNode * Parse::dowhile_stmt(void) { TreeNode * t=newStmtNode(DowhileK); match(DO); if(t!=NULL)t->child [0]=stmt_sequence(); match(WHILE); if(t!=NULL)t->child [1]=exp(); return t; }
TreeNode * Parse::for_stmt(void) { TreeNode * t=newStmtNode(ForIncK); match(FOR); if(t!=NULL) { t->child [0]=assign_stmt(); if(token==TO) match(TO); else if(token==DOWNTO) { match(DOWNTO); t->kind.stmt =ForDecK; }
t->child [1]=simple_exp(); match(DO); t->child [2]=stmt_sequence(); match(ENDDO); } return t; }
TINY+语言的语法分析软件提供Window界面,用户可以点击【打开】按钮打开或者在编辑框中输入一个扩展Tiny+语言源程序;通过【打印语法树】复选按钮可以选择在分析结果中打印语法树,【语法分析】按钮提供Tiny语言词法分析功能,对源程序进行语法分析后在内存中生成语法树,并将分析结果显示在编辑框中;【文件另存为】按钮可以保存文件。
3.软件功能展示
分析结果:
正在阅读:
编译原理实验(Tiny+语法分析)08-25
中共中央办公厅,国务院办公厅关于健全和完善村务公开和民主管理04-30
医院监控方案11-30
芽芽班幼儿的年龄特点05-13
生化作业611-30
六年级英语用所给词的适当形式填空05-05
电磁学试卷05-24
适合中年男人的网名02-15
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 编译
- 语法
- 原理
- 实验
- 分析
- Tiny
- 2017年北京市培养单位理化技术研究所811量子力学考研仿真模拟题
- 2018年南京师范大学数学科学学院839高等代数考研冲刺狂背五套题
- 保利桃源国际2013年公关活动策划沟通案
- 6.2:特别行政区——香港和澳门
- 校园新闻栏目策划案
- 会计继续教育网上考试答案之判断
- 2016年中央财政支持地下综合管廊和海绵城市建设试点城市名单
- 急性心肌梗死的护理查房__槿庭
- 美国的联邦制 导学案
- 【新编】初中数学人教版八年级上13.4 课题学习 最短路径问题教案版本2-参考下载
- (电大)个人与团队管理形成性考核册参考答案
- 县海洋与渔业局关于开展领导干部班子和干部队伍建设调研情况汇报
- 2013届初三英语专项训练:书面表达
- 某会议室系统集成方案(音视频部分)
- 2018-2024年中国火电设备市场运营监测研究报告(目录)
- “十三五”规划重点-惕各酸异丙酯项目建议书(立项报告)
- 教育系统突发公共事件应急管理
- 武汉工业学院2010-2011级化工原理下册期中试卷及答案
- 网络新闻标题制作大全
- 银联标识卡个人化企业安全管理指南