教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 高等教育 >

编译原理实验(Tiny+语法分析)

来源:网络收集 时间:2026-08-26
导读: TINY+语言的语法分析软件提供Window界面,用户可以点击【打开】按钮打开或者在编辑框中输入一个扩展Tiny+语言源程序;通过【打印语法树】复选按钮可以选择在分析结果中打印语法树,【语法分析】按钮提供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字,全部文档内容请下载后查看。喜欢就下载吧 ……

编译原理实验(Tiny+语法分析).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/126178.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)