实验一、词法分析实验
专业:商业软件工程三班 姓名:郑锦诚 学号:201506110198
一、实验目的
词法分析是编译的第一阶段,它的主要任务是从左至右逐个字符地对源程序进行扫描,产生一个个单词序列,用于语法分析。
二、实验内容和要求
让用户输入一段程序段,然后逐个读取字符,将它们拼在一起,获取一个有意义的单词或符号,识别出单词或符号种别以及自身的值,并输出。
各种单词符号对应的种别码:
单词符号 |
种别码 |
单词符号 |
种别码 |
begin |
1 |
: |
17 |
if |
2 |
:= |
18 |
then |
3 |
< |
20 |
while |
4 |
<= |
21 |
do |
5 |
<> |
22 |
end |
6 |
> |
23 |
l(l|d)* |
10 |
>= |
24 |
dd* |
11 |
= |
25 |
+ |
13 |
; |
26 |
- |
14 |
( |
27 |
* |
15 |
) |
28 |
/ |
16 |
# |
0 |
三、实验方法、步骤及结果测试
- 1. 源程序名:压缩包文件(rar或zip)中源程序名词法分析.c
可执行程序名:词法分析.exe
- 2. 原理分析及流程图
主要总体设计问题:本次实验程序是用顺序存储结构,关键函数为mor,没有参数,也没有返回值,全用全局变量来实现运行代码,多次使用循环语句while、do whlie以及for,也使用了判断语句if、else判断是否为符号时使用了switch语句进行执行判断。
- 3. 主要程序段及其解释:
void mor()//主要函数的调用 { sum=0; //先把sum赋值为0 ch=a[p++]; //把有程序段数组a的字符赋给ch,p再加一 m=0; //把m赋值为0 while((ch==' ')||(ch==' ')||(ch==' ')) ch=a[p++]; //判断ch是否为空格,若是则进行判断下一个字符,p再加一 if(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))) {//判断字符ch是否是字母,若是则赋值给数组b,ch指向判断下一个字符是否是字母或是数字,并且p加一 while(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))||((ch>='0')&&(ch<='9'))) { b[m++]=ch; ch=a[p++]; } p--; //循环结束后,p减一,为了防止漏掉字符 syn=10; //先把syn赋值为10,再进行判断是否是保留字或是关键字 b[m++]='