【编译原理实验】|词法分析程序设计原理与实现技术
实验总览
这学期的作业很多也很硬,直到期末彻底结束才来把报告挪到这里,编译原理实验中还有很多的疏漏,但是实验要求都已经悉数完成,主要的时间还是花在了各种构造表及构造表的前置数据的构造中,最终的六个实验代码都发在github中。
专题 1_词法分析程序设计原理与实现技术
专题 2_递归下降语法分析设计原理与实现技术
专题 3_LL(1)语法分析设计原理与实现技术
专题 4_算符优先语法分析设计原理与实现技术
专题 5_基于 SLR(1)分析法的语法制导翻译及中间代码生成程序设计原理与实现技术
专题 6_编译器前端实现(专题 1+专题 5)
本次程序介绍
程序功能如下:
正则文法:
<标识符>→字母︱ <标识符>字母︱ <标识符>数字
<无符号整数>→数字︱ <无符号整数>数字
<单字符分界符> →+ ︱- ︱* ︱;︱, ︱(︱) ︱{︱}︱[︱]
<双字符分界符>→<大于>=︱<小于>=︱<小于>>︱<逻辑非>=︱<等于>=︱<斜竖>*
<小于>→<
<等于>→=
<大于>→>
<斜竖> →/
<逻辑非>→!
<保留字> → Main︱If︱else︱int︱return︱void︱while
输入:字符串形式的源程序。
输出:具有独立意义的单词符号。
详细实现
数据结构
以下数据结构将分离出来的字符存放起来。
以下数据结构将识别出来分割好的有序的字符存放起来,ResultVector是将二元式按输入顺序保存了起来。
函数介绍
单词类别表
这里单词类别看起来限制的很死,但是我在程序中预留的位置实际上是可以非常容易的更改的。
序号 | 符号 | 类别号 |
---|---|---|
1 | = | 1 |
2 | + | 2 |
3 | _ | 3 |
4 | ***** | 4 |
5 | / | 5 |
6 | < | 6 |
7 | > | 7 |
8 | ! | 8 |
9 | ; | 9 |
10 | : | 10 |
11 | , | 11 |
12 | { | 12 |
13 | } | 13 |
14 | [ | 14 |
15 | ] | 15 |
16 | ( | 16 |
17 | ) | 17 |
18 | <= | 18 |
19 | >= | 19 |
20 | == | 20 |
21 | != | 21 |
22 | main | 22 |
23 | int | 23 |
24 | if | 24 |
25 | else | 25 |
26 | return | 26 |
27 | void | 27 |
28 | while | 28 |
29 | 标识符 | 29 |
30 | 整数 | 30 |
DFM图
程序测试
本程序的测试代码存在可执行文件同目录下的*code.txt*中。本程序中输入串每个符号与符号之间需要空格分隔。
测试用例1
测试结果1
测试用例2
测试结果2
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!