词法分析器(C语言版).docxVIP

  • 4
  • 0
  • 约6.46千字
  • 约 12页
  • 2018-01-02 发布于河南
  • 举报
词法分析器(C语言版)

/***********************************************名称:词法分析器*版本:1.0*作者:***2015/4/2************************************************/#include stdio.h#include string.h#include ctype.h#include stdlib.h#include assert.h#define LENGTH1 10//type reserved word sizeFILE * fp=NULL;//outstream PointerFILE * fw=NULL;//instream pointerchar character;char token[32]; //The character array to store the sequence of characters, has been read.//Code tablechar * CODE[]={identifier,constant,keyword,+,-,*,/,,,=,=,!=,=,==,(,),[,],{,},,||,!,,,;,.,:,\,%,#,\};//key word tablechar *k[]={for,while,do,go,to,switch,if,else,int,float,char,static,break,exit,continu,error};//标识符结构体typedefstruct{char * I[256]; //标识符数组intlen;//标识符数量} identifier; //常量结构体typedefstruct {intcont[300];//存放常量的数组intlen;//常量的数目} constnumber;//读入一个字符,从输入流中读入一个字符到变量character中。void getNextChar(FILE *ifp){if((character=getc(ifp))==EOF)exit(1);}//读入非空白字符,检查变量character中的字符是否为空白字符或回车或换行符。若是,//则调用getNextChar()读入下一个字符,直到character中的字符满足条件.void getnbc(FILE *ifp){while(character== || character==\n||character==9){getNextChar(ifp);}}//连接字符串,把character中的字符连接到token数组的结尾。void concat(){char * ct=character;strcat(token,ct);}//判断是否为字母。int letter(){return isalpha(character);}//判断是否为数字int digit(){return isdigit(character);}//回退字符,将刚读入的character中的字符回退到输入流中。并把character中的值置为空。void retract(FILE *ifp){(ifp-_cnt)++;(ifp-_ptr)--;character= ;}//处理保留字,对存放在token中的字符串查保留字,若查到,则返回该保留字的类别编码,否则返回0.int reserve(char **k){inti;for(i=0;iLENGTH1;i++)if(strcmp(token,k[i])==0)return i+1;return 0;}//处理标识符,对存放在token中的字符串查找符号表,若查到,则返回它在符号表的位置,//存入常数表中,并返回它在常数表中的位置编号。int symbol(identifier * id){inti;for(i=0;iid-len;i++)if(strcmp(token,id-I[i])==0)return i+1;if(id-len256)assert(0);id-I[id-len]=token;id-len++;return id-len;}//将数字字符串转化为整数。intstrtonumber(){inti;int sum=0;for(i=0;istrlen(token);i++){sum=10*sum+(token[i]-0);}return sum;}//常数存入常数表的函数,将token中的数字串(实际上是字符串),转化成标准的二进制值(整数值)//存入常数表中,并返回它在常数表中的位置编号。int constant(constnumber * con){con-cont[con-len]=strtonumber();con-len++

文档评论(0)

1亿VIP精品文档

相关文档