c语言编写的词法分析程序_第1页
c语言编写的词法分析程序_第2页
c语言编写的词法分析程序_第3页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、#includestdio. h>#include <stdlib. h>#include <string h>nclude <ctype h>SdefineSPACE 0x20 /空格键SdefineCHANGE 'c' /转义字符#defineSTRING 'S' 引号里的字符串#defineBOUNDARY ' B' /界符#defineOPERATION ' O' /运算符#defineword ' r /标识符#defineKEY.WORD 'K' /关键

2、字SdefineDIGIT ' n' 数字,包括小数SdefineDOTH 'd' /头文件,“.h”文件#defineIXT ' t'#definevoid ' v'#defineIF 'f'#define ELSE ' e#define WHILE ' w'#define FOR ,r#define NfAIN ' m'Sdefine printF ' p'#define INCLUDE ' u'#define FLOAT '1&#

3、39;#define KEYNUM 10#define BOUNDNUM 8#define OPERNUM 7#define V ALUENUM 100*/ /* data type */ » " " " » " " » » " " " » " " » » " " " » " " » » " " " » &q

4、uot; " » » " " " » " " » » " " " » " " » » " " " » " " » » " " " » " " » » " " " » " » | | j j

5、4 | 1 j | | j j 4 | 1 j | | j j 4 | 1 j | | j j 4 | 1 j | | j j 4 | 1 j | | j j 4 | 1 j | | j j 4 | 1 j | | j j 4 | 1 j | | j j 4 | j */ struct bianliangint id;char name20;int value;struct changliangint data;Keyword KEYNUM 8二"int", "void","辻","else", "whi

6、le", "for", "main"," printf", "include", "float"char Boundary BOUNDNUM =char OperationOPERNUM =-二','','';charLogogramKEYNUM = INT, VOID, IF, ELSE, WHILE, FOR, MAIN, PRINTF, INCLUDE, FL OAT;char ValueV ALUENUM8;int Vdlue_n=0;i

7、nt ErrorLine=0;int QuotationCount二0; /计算引号的数量int QuotationFlag=0; /引号数量为奇数时为1,偶数时为0char Last0pera=0; /用于判断"二二"号存前一个"二"号*/* function describe */*/int isKeyWord(char* s) /是关键字返回1,否则返回0int i;for (i二O;iKEYXUM;i+)if (strcmp(KeyWordi, s)=0)return i+1;return 0;int isBoundary (char ch) /

8、是界符int i;for (i二0;iB0UNDNUM;i+)if (Boundary i ch)return i+1;return 0;int i sOperat ion (char ch) /是运算符int i;for (i二0;i0PERNUM;i+) if (Operationi二二ch)return i+1;return 0;int isDigit (char *s) /是数字int i, 1 二strien(s);for (i二0;il;i+)if (!isdigit(si)break;辻(i>=l)elseif 二二 si)i+;for (;i<l;i+)if (!i

9、sdigit(si)break;else(TS)PHdTPSTj) JT(+I0二!)MT:(s)U9ms二! JU#¥¥>/(s* 卫qo)H2(IS! 1UT:0 UJR4.9J 9S9 UJR4.9J(l-<D JIreturn 0;elsei+;if (si=, h')return 1;elsereturn 0;elsereturn 0;int isWord (char *s) 是标识符int i=0,l=strlen(s):if (isalpha(si)i+;for (;i<l;i+)if (!isalnum(si)break;if (i

10、>=l)return 1;elsereturn 0;void isWhat(int *i,char *str, FILE *fileOutput,FILE *file0utput2) / 判断字符吊,并把相应类型存入文件int n;struct bianliang temp;struct changliang t;FILE *f i le=f open (''num. txt", "ab");if(l!=*i)str (")=' 0'if(n=isKeyWord(str)fputs(str,fileOutput);fputc (' t', file Output);fputc (KEYWORD, fileOutput);fputc (' t, fileOutput);if(isKeyWord(str)>9)fputc(isKeyWord(str)+' a -10, fileOutput); elsefputc(isKeyWord(str)+' 0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论