资源简介
这是学《编译原理》时的上机实验。可实现对C语言的词法分析,关键字32个,包含了C的绝大部分运算、限界符,主要是对文件进行读、写操作,节省内存消耗,自以为是一个不错的词法分析程序。运行环境为VC++6.0。
代码片段和文件信息
/*******************************************
词法分析程序
作者:龚勋
学号:200131500342
计科系 13班
********************************************/
#include
#include
#include
/*******************************************
初始化函数
********************************************/
void init()
{
char *key[]={“ ““auto““break““case““char““const““continue““default““do““double“
“else““enum““extern““float““for““goto““if““int““long““register“
“return““short““signed““sizeof““static““struct““switch““typedef“
“union““unsigned““void““volatile““while“}; /*C语言所有关键字,共32个*/
char *limit[]={“ ““(““)““[““]““->““.““!““++““--““&““~“
“*““/““%““+““-““<<““>>““<““<=““>““>=““==““!=““&&““||“
“=““+=““-=““*=““/=““““;““{““}““#““_““‘“};/*运算、限界符*/
FILE *fp;
int i;
char c;
fp=fopen(“k.txt““w“);
for(i=1;i<=32;i++)
fprintf(fp“%s\n“key[i]);
fclose(fp); /*初始化关键字表*/
fp=fopen(“l.txt““w“);
for(i=1;i<=38;i++)
fprintf(fp“%s\n“limit[i]);
c=‘“‘;
fprintf(fp“%c\n“c);
fclose(fp); /*初始化运算、限界符表*/
fp=fopen(“i.txt““w“);
fclose(fp); /*初始化标识符表*/
fp=fopen(“c.txt““w“);
fclose(fp); /*初始化常数表*/
fp=fopen(“output.txt““w“);
fclose(fp); /*初始化输出文件*/
}
/*******************************************
十进制转二进制函数
********************************************/
char * dtb(char *buf)
{
int temp[20];
char *binary;
int value=0i=0j;
for(i=0;buf[i]!=‘\0‘;i++)
value=value*10+(buf[i]-48); /*先将字符转化为十进制数*/
if(value==0)
{
binary=malloc(2*sizeof(char));
binary[0]=‘0‘;
binary[1]=‘\0‘;
return(binary);
}
i=0;
while(value!=0)
{
temp[i++]=value%2;
value/=2;
}
temp[i]=‘\0‘;
binary=malloc((i+1)*sizeof(char));
for(j=0;j<=i-1;j++)
binary[j]=(char)(temp[i-j-1]+48);
binary[i]=‘\0‘;
return(binary);
}
/*******************************************
根据不同命令查表或造表函数
********************************************/
int find(char *bufint typeint command)
{
int number=0;
FILE *fp;
char c;
char temp[30];
int i=0;
switch(type)
{
case 1: fp=fopen(“k.txt““r“);break;
case 2: fp=fopen(“i.txt““r“);break;
case 3: fp=fopen(“c.txt““r“);break;
case 4: fp=fopen(“l.txt““r“);
}
c=fgetc(fp);
while(c!=EOF)
{
while(c!=‘\n‘)
{
temp[i++]=c;
c=fgetc(fp);
}
temp[i]=‘\0‘;
i=0;
number++;
if(strcmp(tempbuf)==0)
{
fclose(fp);
return(number); /*若找到,返回在相应表中的序号*/
}
else
c=fgetc(fp);
}
if(command==1)
{
f
- 上一篇:c++语言-物流管理系统
- 下一篇:正则表达式转换为nfa以c语言源程序
相关资源
- OLED驱动源码
- tm1650+stm32f103源码(board_tm1650.c)
- cheat engine 7.2源码
- CrySearch内存搜索器源码
- FTP客户端源码(c++)
- MFC视频播放器源码(支持avi/wma/mp3等格
- CreatBitmap图片合成源码
- vs2008 can总线通讯源码
- MFC控件重绘
- 宠物管理系统课程设计(源码+数据库
- Windows扩展命令程序(源码)
- c语言实现火车订票系统(控制台)源
- 鼠标连点器(附源码)
- c++ 简易贪吃蛇源码
- 杀毒软件源码
- 经典外汇智能交易程序Amazing3.1源码(
- 微型文件系统源码(FatFs)
- 海康私有流分析接口源码(附使用说
- VC6 USB开发源码
- SVM算法实现(源码+文档)
- 俄罗斯方块游戏源码(Tetris)
- 步进电机控制(源码+文档)
- c++ 定时关机程序源码
- c++ 账务系统源码
- c语言课程设计:客房登记系统源码
- 贪吃蛇大作战(c源码+报告文档)
- 学生成绩管理系统(c源码)
- 职工信息管理系统源码(控制台)
- 吕鑫vc6c++数据结构视频源码
- 智商超高的中国象棋游戏源码(C++版
评论
共有 条评论