南华大学
计算机学院/软件学院
实 验 报 告
( 2017 ~2018 学年度 大二 第 二 学期 )
课程名称 |
程序设计与编译原理 |
实验名称 |
C语言词法分析器的设计与实现 |
1.实验目的及要求
实验目的:
通过设计、编制、调试一个具体的词法分析程序,加深对词法分析原理的理解,并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。
实验要求:
1、根据具体情况,自己选取C++ 语言的一个适当大小的子集(可取一类典型单词,也可以尽可能使各种类型的单词都兼顾到);在实现前一定要制出相应的表.
2、验时间:4-8学时.
3、检查内容及时间:
A) 完整的实验报告(算法流程必须要有);
B) 在机器上调试成功的源程序;
4、对单词的构词规则有明确的定义;
5、编写的分析程序能够正确识别源程序中的单词符号;
6、识别出的单词以<种别码,值>的形式保存在符号表中,正确设计和维护符号表;
7、对于源程序中的词法错误,能够做出简单的错误处理,给出简单的错误提示,保证顺利完成整个源程序的词法分析;
实验内容:
自定义一种程序设计语言,或者选择已有的一种高级语言,编制它的词法分析程序。词法分析程序的实现可以采用任何一种编程语言和编程工具。
从输入的源程序中,识别出各个具有独立意义的单词,即关键字、标识符、常数、运算符、界符。并依次输出各个单词的内部编码及单词符号自身值。(遇到错误时可显示“Error”,然后跳过错误部分继续显示)
软件、硬件环境
软件:VisualStudio编写、调试并执行实验代码
硬件:普通笔记本电脑,windows10(OS系统)
- 实验步骤
- 定义目标语言的可用符号表和构词规则;
保留字(类型编码:1) |
单词符号 |
表内位置 |
单词符号 |
表内位置 |
main |
1 |
int |
2 |
if |
3 |
else |
4 |
while |
5 |
for |
6 |
read |
7 |
write |
8 |
bool |
9 |
break |
10 |
case |
11 |
catch |
12 |
char |
13 |
class |
14 |
const |
15 |
continue |
16 |
default |
17 |
delete |
18 |
do |
19 |
double |
20 |
enum |
21 |
false |
22 |
true |
23 |
float |
24 |
friend |
25 |
goto |
26 |
inline |
27 |
long |
28 |
new |
29 |
private |
30 |
protected |
31 |
public |
32 |
return |
33 |
short |
34 |
signed |
35 |
sizeof |
36 |
static |
37 |
struct |
38 |
switch |
39 |
this |
40 |
try |
41 |
typedef |
42 |
unsigned |
43 |
using |
44 |
virtual |
45 |
void |
46 |
include |
47 |
iostream |
48 |
namespace |
49 |
std |
50 |
界符 |
( |
121 |
) |
122 |
, |
123 |
; |
124 |
{ |
125 |
} |
126 |
# |
127 |
|
|
运算符 |
+ |
210 |
- |
211 |
* |
212 |
/ |
213 |
< |
214 |
<= |
215 |
> |
216 |
>= |
217 |
!= |
218 |
== |
219 |
= |
220 |
|
|
- 依次读入源程序符号,对源程序进行单词切分和识别,直到源程序结束;
- 对正确的单词,按照它的种别以<种别码,值>的形式保存在符号表中;
- 对不正确的单词,做出错误处理。
3. 实验内容
状态转换图:

流程图:

源程序:
//头文件
#include
#include
4.实验结果
1、待词法分析的源程序输入

2、词法分析器识别结果

3、各种词汇表的展示
5. 实验总结分析
通过此次实验,让我了解到如何设计、编制并调试词法分析程序,加深对词法分析原理的理解;熟悉了构造词法分析程序的手工方式的相关原理,根据识别语言单词的状态转换图,使用C++直接编写此词法分析程序。因为程序简单,我没有使用读取文件操作了,直接控制台输入,这样老师就可以直接打开源代码运行,而不会因为打开文件路径不存在而报错了。方便老师检查运行情况。