首页 > 代码库 > 词法分析试验报告
词法分析试验报告
|
实验一、词法分析实验
商业软件工程 曾颖鑫 学号 201506110229
一、 实验目的
编写一个词法分析。
二、 实验内容和要求
输入:源程序字符串
输出:二元组(种别,单词本身)
各种单词符号对应的种别码:
单词符号 | 种别码 | 单词符号 | 种别码 |
bagin | 1 | : | 17 |
If | 2 | := | 18 |
Then | 3 | < | 20 |
while | 4 | <> | 21 |
do | 5 | <= | 22 |
end | 6 | > | 23 |
lettet(letteet|digit) | 10 | >= | 24 |
digit digit* | 11 | = | 25 |
+ | 13 | ; | 26 |
- | 14 | ( | 27 |
* | 15 | ) | 28 |
/ | 16 | # | 0 |
三、 实验方法、步骤及结果测试
1. 源程序名:词法分析.c
2. 主要程序段及其解释:
#include<stdio.h>#include<string.h>char ch,token[8],prog[80];int syn,p,m,n,sum;char *rwtab[6]={"begin","if","then","while","do","end"};void scaner();main(){ p=0; printf("请输入一个字符串(输入#表示结束):"); 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"); getch(); exit(0); default:printf("%-10s%5d\n",token,syn); break; } }while(syn!=0); getch();}void scaner(){ sum=0; for(m=0;m<8;m++) token[m++]=NULL; ch=prog[p++]; m=0; while((ch==‘ ‘)||(ch==‘\n‘)) ch=prog[p++]; if(((ch<=‘z‘)&&(ch>=‘a‘))||((ch<=‘Z‘)&&(ch>=‘A‘))) { while(((ch<=‘z‘)&&(ch>=‘a‘))||((ch<=‘Z‘)&&(ch>=‘A‘))||((ch>=‘0‘)&&(ch<=‘9‘))) { token[m++]=ch; ch=prog[p++]; } p--; syn=10; for(n=0;n<6;n++) if(strcmp(token,rwtab[n])==0) { syn=n+1; break; } } else if((ch>=‘0‘)&&(ch<=‘9‘)) { while((ch>=‘0‘)&&(ch<=‘9‘)) { sum=sum*10+ch-‘0‘; ch=prog[p++]; } p--; syn=11; } else switch(ch) { case ‘<‘:token[m++]=ch; ch=prog[p++]; if(ch==‘=‘) { syn=22; token[m++]=ch; } else { syn=20; p--; } break; case ‘>‘:token[m++]=ch; ch=prog[p++]; if(ch==‘=‘) { syn=24; token[m++]=ch; } else { syn=23; p--; } break; case ‘+‘: token[m++]=ch; ch=prog[p++]; if(ch==‘+‘) { syn=17; token[m++]=ch; } else { syn=13; p--; } break; case ‘-‘:token[m++]=ch; ch=prog[p++]; if(ch==‘-‘) { syn=29; token[m++]=ch; } else { syn=14; p--; } break; case ‘!‘:ch=prog[p++]; ch=prog[p++]; if(ch==‘=‘) { syn=21; token[m++]=ch; } else { syn=31; p--; } break; case ‘=‘:token[m++]=ch; ch=prog[p++]; if(ch==‘=‘) { syn=25; token[m++]=ch; } else { syn=18; p--; } break; case ‘*‘:syn=15; token[m++]=ch; break; case ‘/‘:syn=16; token[m++]=ch; break; case ‘(‘:syn=27; token[m++]=ch; break; case ‘)‘:syn=28; token[m++]=ch; break; case ‘{‘:syn=5; token[m++]=ch; break; case ‘}‘:syn=6; token[m++]=ch; break; case ‘;‘:syn=26; token[m++]=ch; break; case ‘\"‘:syn=30; token[m++]=ch; break; case ‘#‘:syn=0; token[m++]=ch; break; case ‘:‘:syn=17; token[m++]=ch; break; default: syn=-1; break; } token[m++]=‘\0‘;}
3. 运行结果及分析
四、 实验总结
词法分析可以帮助自己更好地了解编译语言的编译工作原理,此次实验花了很多功夫才完成对编译器读取字符的工作有了一定了解。
词法分析试验报告
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。