首页 > 代码库 > 实验一:词法分析
实验一:词法分析
实验一、词法分析实验
专业:计算机科学与技术 姓名:罗德广 学号:201506110204
一、实验目的
用C语言实现简单的词法分析程序;设计一个词法分析程序,加深对词法分析原理的理解 。
二、实验内容和要求
编写一个词法分析程序,使其能够识别对应的单词符号,并以(单词符号 种别码)的形式输出。
三、实验方法、步骤及结果测试
1.源程序名:压缩包文件(rar或zip)中源程序名 词法分析.c
可执行程序名:词法分析.exe
2.原理分析及流程图
3.主要程序段及其解释:
实现主要功能的程序段,重要的是程序的注释解释。
#include <stdio.h>#include <string.h>char a[80],s[8],ch;int q,p,m,n,sum;char *l[6]={"begin","if","then","while","do","end"};//定义数组l,用于存放关键字void scaner(void);main(){ p=0; printf("\n请输入一个字符串(以‘#‘结尾):\n"); do{ scanf("%c",&ch); a[p++]=ch; }while(ch!=‘#‘); p=0; do{ scaner(); switch(q) { case 11: printf("( %-10d%5d )\n",sum,q); break; case -1: printf("输入错误!\n"); //getch(); return 0; break; default: printf("( %-10s%5d )\n",s,q); break; } }while(q!=0); //getch(); }void scaner(void)//利用循环进行字符串的识别和比较{ sum=0; for(m=0;m<8;m++) s[m++]= NULL; ch=a[p++]; m=0; while((ch==‘ ‘)||(ch==‘\n‘)) ch=a[p++]; if(((ch<=‘z‘)&&(ch>=‘a‘))||((ch<=‘Z‘)&&(ch>=‘A‘))) { while(((ch<=‘z‘)&&(ch>=‘a‘))||((ch<=‘Z‘)&&(ch>=‘A‘))||((ch>=‘0‘)&&(ch<=‘9‘))) { s[m++]=ch; ch=a[p++]; } p--; q=10; for(n=0;n<6;n++) if(strcmp(s,l[n])==0) { q=n+1; break; } } else if((ch>=‘0‘)&&(ch<=‘9‘)) { while((ch>=‘0‘)&&(ch<=‘9‘)) { sum=sum*10+ch-‘0‘; ch=a[p++]; } p--; q=11; } else { switch(ch) { case ‘<‘: s[m++]=ch; ch=a[p++]; if(ch==‘=‘) { q=22; s[m++]=ch; } else { q=20; p--; } break; case ‘>‘: s[m++]=ch; ch=a[p++]; if(ch==‘=‘) { q=24; s[m++]=ch; } else { q=23; p--; } break; case ‘+‘: s[m++]=ch; ch=a[p++]; if(ch==‘+‘) { q=17; s[m++]=ch; } else { q=13; p--; } break; case ‘-‘: s[m++]=ch; ch=a[p++]; if(ch==‘-‘) { q=29; s[m++]=ch; } else { q=14; p--; } break; case ‘!‘: ch=a[p++]; if(ch==‘=‘) { q=21; s[m++]=ch; } else { q=31; p--; } break; case ‘=‘: s[m++]=ch; ch=a[p++]; if(ch==‘=‘) { q=25; s[m++]=ch; } else { q=18; p--; } break; case ‘*‘: q=15; s[m++]=ch; break; case ‘/‘: q=16; s[m++]=ch; break; case ‘(‘: q=27; s[m++]=ch; break; case ‘)‘: q=28; s[m++]=ch; break; case ‘{‘: q=5; s[m++]=ch; break; case ‘}‘: q=6; s[m++]=ch; break; case ‘;‘: q=26; s[m++]=ch; break; case ‘\"‘: q=30; s[m++]=ch; break; case ‘#‘: q=0; s[m++]=ch; break; case ‘:‘: q=17; s[m++]=ch; break; default: q=-1; break; } } s[m++]=‘\0‘;}
4.运行结果及分析
四、实验总结
数组a存放键盘输入的字符,数组l存放关键字。通过判断空格键来用数组s存放前面的字符,若前面的字符既出现字母又出现数字,则是标识符。反之就是关键字。然后通过数组s的字符串与前面定义l数组的字符串一一比较,输出所对应的种别码。
实验一:词法分析
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。