收藏 分销(赏)

Tiny语言的词法分析器C版专业课程设计方案报告.doc

上传人:a199****6536 文档编号:2727224 上传时间:2024-06-05 格式:DOC 页数:13 大小:178.04KB
下载 相关 举报
Tiny语言的词法分析器C版专业课程设计方案报告.doc_第1页
第1页 / 共13页
Tiny语言的词法分析器C版专业课程设计方案报告.doc_第2页
第2页 / 共13页
Tiny语言的词法分析器C版专业课程设计方案报告.doc_第3页
第3页 / 共13页
Tiny语言的词法分析器C版专业课程设计方案报告.doc_第4页
第4页 / 共13页
Tiny语言的词法分析器C版专业课程设计方案报告.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

1、实 验 报 告 学号: 姓名: 专业:计算机科学和技术 班级:2班 第9周 课程名称 编译原理课程设计 试验课时8试验项目手工结构Tiny语言词法分析器试验时间7-10周试验目标 熟悉Tiny语言词法;结构DFA;设计数据类型、数据结构;用C+实现Tiny语言词法分析器试验环境 Windows 10 专业版 Microsoft Visual Studio 试验内容(算法、程序、步骤和方法) 一、Tiny语言记号Reserved wordsSpecial SymbolsOtherif+number(1 or more digits)then-else*endrepeat=until/identi

2、fier(1 or more letters)read(write);:=二、结构Tiny语言DFAID:letter(letter)*Number: digit(digit)*三、依据DFA编写词法分析器#include#include#includeusing namespace std;static int rowCounter = 1;/静态变量,用于存放行数static bool bracketExist = false;/判定注释存在是否,false为不存在class Lexpublic:ofstream output;string line = ;Lex(string input

3、Line)line = inputLine;scan(Trim(line);rowCounter+;string Trim(string &str)/函数用于去除每行前后空格int s = str.find_first_not_of( t);int e = str.find_last_not_of( t);str = str.substr(s, e - s + 1);str += 0;return str;void scan(string inputLine)ofstream output;output.open(SampleOutput.txt, ios:app);string line =

4、 inputLine;int i = 0;string str = ;int temp;string token = ;output rowCounter : line endl;/输出每行while (linei != 0)/依据DFA扫描并判定if (linei = )/注释bracketExist = true;if (bracketExist = true)output t rowCounter : ;while (linei != )output linei;/不处理,直接输出if (linei + 1 != NULL)i+;elsebreak;if (linei = )/注释结束o

5、utput lineiendl;bracketExist = false;if (bracketExist = false)/数字while (isdigit(linei)temp = temp * 10 + linei;if (!isdigit(linei + 1)output t rowCounter : NUM, val= temp - 0 = a&linei = A&linei = a&linei + 1 = A&linei + 1 = Z) | linei + 1 = | linei + 1 = | linei + 1 = | linei + 1 = NULL)if (isToken

6、(token)output t rowCounter : token endl;elseint j = 0;while (tokenj != 0)output t rowCounter : tokenj = a&linei = A&linei = a&linei + 1 = A&linei + 1 = Z)if (isResearvedWord(str) /判定是否是保留字output t rowCounter : Reversed Word: str endl;break;elseoutput t rowCounter : ID, name= str endl;break;if (linei

7、 + 1 != NULL)i+;str = ;if (linei + 1 != NULL)i+;elsebreak;if (linei + 1 = NULL)if (linei = ;)output t rowCounter : linei;break;/清空,以备下一行读取line = ;str = ;temp = 0;token = ;output endl;output.close();bool isResearvedWord(string s)/存放保留字,并判定string reservedWord8 = if, then, else, end, repeat, until, rea

8、d, write ;bool judge = false;for (int i = 0; i 8; i+)if (s = reservedWordi)judge = true;break;return judge;bool isToken(string s)/存放符号,并判定string token10 = +, -, *, /, =, , (, ), ;, := ;bool judge = false;for (int i = 0; i 10; i+)if (s = tokeni)judge = true;break;return judge;int main()ifstream input

9、;input.open(SampleInput.tny);string line50;int i = 0;while (getline(input, linei)/cout linei endl;i+;input.close();cout endl endl Reading source file completed! endl;int j = 0;remove(SampleOutput.txt);for (j = 0; j i; j+)Lex lex(linej);cout endl endl Writing file completed! endl endl endl;return 0;四

10、、关键数据结构string line:用于存放每一行字符,并逐一读取分析。string token:用于存放TINY语言符号,并调用遍历进行判定。string reservedWord:用于存放TINY语言保留字,遍历进行判定,若为真,则输出Reserved word。static int rowCounter:静态变量,存放行号,每创建一个类实例便加一。int temp:用于存放数字,并输出。static int bracketExist:静态变量,标识注释是否存在。string token, str分别用于临时存放读取符号字母串。五、算法总结 建立Lex class,并读取每一行,创建Le

11、x实例,在Lex中处理。先判定是否在注释范围内,若是,则输出注释内容,直至产生“”字符。若不在注释区内,则读取单个字符,依据DFA进行判定。若为符号,则当下一个字符不是符号时输出;若为数字,则继续往下读,直至下一个字符不是数字为止,输出。若为字母,继续读取,直至下一个字符不是字母,把这一串字母和预先定义保留字比对,若是,则输出“Reserved word”,若不是,则输出“ID,name=”字样。一行处理完成,便开始创建下一行实例,直至文件尾。数据统计和计算 Tiny测试程序结 论(结 果) 1: Sample program1: Sample program2: in TINY langua

12、ge -2: in TINY language -3: computes factorial3: computes factorial4: 4: 5: read x; input an integer 5: Reversed Word: read5: ID, name= x5: ;5: input an integer 6: if 0 x then dont compute if x = 0 6: Reversed Word: if6: NUM, val= 06: 6: ID, name= x6: Reversed Word: then6: dont compute if x = 0 7: f

13、act := 1;7: ID, name= fact7: :=7: NUM, val= 17: ;8: repeat8: Reversed Word: repeat9: fact := fact * x;9: ID, name= fact9: :=9: ID, name= fact9: *9: ID, name= x9: ;10: x := x - 1;10: ID, name= x10: :=10: ID, name= x10: -10: NUM, val= 110: ;11: until x = 0;11: Reversed Word: until11: ID, name= x11: =11: NUM, val= 011: ;12: write fact output factorial of x 12: Reversed Word: write12: ID, name= fact12: output factorial of x 13: end13: Reversed Word: end小 结 顺利完成试验,熟悉了Tiny语言和其词法。依据语言和词法规则,顺利结构DFA。成功用C+语言,依据结构DFA,实现了Tiny词法分析器。增强了自己编程能力和水平技巧,尝试了很多以前没有尝试过方法学习到了新知识。指导老师评 议 成绩评定: 指导老师署名:

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服