实验一、词法分析实验
实验一、词法分析实验
专业 商业软件2班 姓名 罗肖凤 学号 201504040262
一、 实验目的
通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言进行扫描过程中将其分解为各类单词的词法分析方法。
二、 实验内容和要求
(1) 输入:源程序字符串。
(2) 输出:二元组(种别,单词本身)。
(3) 选择高级语言(C语言),编制它的词法分析程序
三、 实验方法、步骤及结果测试
- 1. 源程序名:压缩包文件(rar或zip)中源程序名词法分析.c
可执行程序名:
词法分析.exe
- 2. 原理分析及流程图
待分析的简单词法
(1) 关键字:begin if then while do end 所有的关键字都是小写。
(2) 运算符和界符::= + - * / < <= > >= ; ( ) #
(3) 空格有空白、制表符和换行符组成
各种单词符号对应的种别码
单词符号 |
种别码 |
单词符号 |
种别码 |
begin |
1 |
: |
17 |
if |
2 |
: = |
18 |
then |
3 |
< |
20 |
while |
4 |
<> |
21 |
do |
5 |
<= |
22 |
end |
6 |
> |
23 |
letter (letter | digit)* |
10 |
>= |
24 |
digit digit* |
11 |
= |
25 |
+ |
13 |
; |
26 |
- |
14 |
( |
27 |
* |
15 |
) |
28 |
/ |
16 |
# |
0 |
主要总体设计问题。
(包括存储结构,主要算法,关键函数的实现等)
- 3. 主要程序段及其解释:
主要功能:输入:所给文法的源程序字符串。
输出:二元组(syn,token或sum)构成的序列。
其中:syn为单词种别码;
token为存放的单词自身字符串;
sum为整型常数
主要程序:
main()
{
p=0;
printf("\n 请输入字符串(以'#'结束):\n");
do{
scanf("%c",&ch);
prog[p++]=ch;
}while(ch!='#');
p=0;
do{
scaner();
switch(syn)
{
case 11:
printf("( %-10d%5d )\n",sum,syn);
break;
case -1:
printf("你输入的字符串有错!\n");
return 0;
break;
default:
printf("( %-10s%5d )\n",token,syn);
break;
}
}while(syn!=0);
}
实现主要功能的程序段,重要的是程序的注释解释。
- 4. 运行结果及分析
四、 实验总结
心得体会,实验过程的难点问题及其解决的方法。
第一次自己写编译词法分析,十分的有难度。此次实验对于我来说挺难的,我通过上网摸索以及跟同学讨论渐渐的了解了如何设计、编制并调试词法分析程序,加深对词法分析原理的理解。