这是本人在本科阶段所做的作业。目的是:1.为了保留纪念,等以后再看自己的作业会不会害羞和骂自己当年多菜:-);2.供师弟参考,因为做这几个作业还是挺费时的.
- 实验一:C++源代码单词扫描程序(词法分析)
一、实验内容及要求:
(1). C++源代码扫描程序识别C++记号。C++语言包含了几种类型的记号:标识符,关键字,数(包括整数、浮点数),字符串、注释、特殊符号(分界符)和运算符号等。
(2). 打开一个C++源文件,打印出所有以上的记号。
(3). 要求应用程序应为Windows界面。
(4). 选作部分:为了提高C++源程序的可读性,C++程序在书写过程中加入了空行、空格、缩进、注释等。假设你想牺牲可读性,以节省磁盘空间,那么你可以存贮一个删除了所有不必要空格和注释的C++源程序的压缩文本。因此,程序中还应该有这样的压缩功能。
(5). 选作部分:进一步思考或实现——如何进一步实现减小源文件大小的压缩功能。
(6). 应该书写完善的软件文档。 - 实验一运行截图如下(单词分割):
- 实验二:XLEX生成器
一、实验内容:
设计一个应用软件,以实现将正则表达式-->NFA--->DFA-->DFA最小化-->词法分析程序
二、实验要求:
(1). 要提供一个源程序编辑界面,让用户输入正则表达式(可保存、打开源程序)
(2). 需要提供窗口以便用户可以查看转换得到的NFA(用状态转换表呈现即可)
(3). 需要提供窗口以便用户可以查看转换得到的DFA(用状态转换表呈现即可)
(4). 需要提供窗口以便用户可以查看转换得到的最小化DFA(用状态转换表呈现即可)
(5). 需要提供窗口以便用户可以查看转换得到的词法分析程序(该分析程序需要用C语言描述)
(6). 应该书写完善的软件文档 - 实验二运行截图如下(词法分析):
- 实验三:TINY扩充语言的语法分析
一、实验内容:
扩充的语法规则有:实现 while、do while、for语句、大于>比较运算符号以及求余计算式子,具体文法规则自行构造。 可参考:P97及P136的文法规则。
(1). While-stmt --> while exp do stmt-sequence endwhile
(2). Dowhile-stmt-->do stmt-sequence while(exp);
(3). for-stmt-->for identifier:=simple-exp to simple-exp do stmt-sequence enddo 步长递增1
(4). for-stmt-->for identifier:=simple-exp downto simple-exp do stmt-sequence enddo 步长递减1
(5). 大于>比较运算符号以及求余计算式子的文法规则请自行组织。
(6). 把TINY语言原有的if语句书写格式
if_stmt-->if exp then stmt-sequence end | if exp then stmt-sequence else stmt-sequence end
改写为:if_stmt-->if(exp) stmt-sequence | if(exp) stmt-sequence else stmt-sequence - 实验三运行截图如下(语法分析):