C语言词法分析小程序———焦童.docVIP

  • 14
  • 0
  • 约6.73千字
  • 约 10页
  • 2017-11-10 发布于江苏
  • 举报
C语言词法分析小程序———焦童

沈阳航空航天大学 编 译 实 验 报 告 实验报告名称:C语言小子集的词法分析程序 院(系):计算机学院 专 业:计算机科学与技术 班 级学 号:2012040101064 姓 名:焦童 一.实验要求: (1)功能:实现 C 语言小子集程序的词法分析。 (2)输入: c 语言小子集的程序片段。 (3)输出:单词序列。 二.单词的属性和表格 单词的属性主要分为五大部分: 1. 关键字,是由程序语言定义的具有固有意义的标示符。有时称为保留字或基 本字。如:int,float,double,char 等。 2. 标识符,用来表示各种名字,如变量名,数组名等。 3. 常量, 常量的类型一般有整型,实型,布尔型,文字型等等。 4. 运算符,如 +,-,*,/,%等。 5. 界符 ,如逗号,分号,括号等等。 表 1 C 语言小子集的定义表 种别码 符号 种别码 符号 种别码 符号 0 无定义 1 主函数 2 无符号实数 3 普通标示符 4 关键字 5 界符 6 运算符 7 自增运算符 8 自减运算符 9 类型标识符 10 区域运算符 总控流程图 Y N 四.测试运行 先输入源代码文件地址 文件源代码如下 显示经过词法分析 源代码 #includestring.h #includestdio.h #includestdlib.h #includectype.h char *Key[10]={main,void,int,char,printf,scanf,else,if,return}; char Word[20],ch; int IsAlpha(char c) { //判断是否为字母 if(((c=z)(c=a))||((c=Z)(c=A))) return 1; else return 0; } int IsNum(char c){ //判断是否为数字 if(c=0c=9) return 1; else return 0; } int IsKey(char *Word){ //识别关键字函数 int m,i; for(i=0;i9;i++){ if((m=strcmp(Word,Key[i]))==0) { if(i==0) return 2; return 1; } } return 0; } void scanner(FILE *fp){ //扫描函数 char Word[20]={\0}; char ch; int i,c; ch=fgetc(fp); //获取字符,指针fp并自动指向下一个字符 if(IsAlpha(ch)){ //判断该字符是否是字母 Word[0]=ch; ch=fgetc(fp); i=1; while(IsNum(ch)||IsAlpha(ch)){ //判断该字符是否是字母或数字 Word[i]=ch; i++; ch=fgetc(fp); } Word[i]=\0; //\0 代表字符结束(空格) fseek(fp,-1,1); //回退一个字符 c=IsKey(Word); //判断是否是关键字 if(c==0) printf(%s\t 3 普通标识符\n\n,Word);//不是关键字 else if(c==2) printf(%s\t 1 主函数\n\n,Word); else printf(%s\t 4 关键字\n\n,Word); }//输出关键字 else //开始判断的字符不是字母 if(IsNum(ch)){ //判断是否是数字

文档评论(0)

1亿VIP精品文档

相关文档