资源简介
将源文件source.c中的内容转换为二元组,在命令提示符窗口输出,使用C语言编写
代码片段和文件信息
#include
#include
#include
#include
#define NULL 0
FILE *fp;//文件指针
char str;
char *keyword[]={
“auto““bool““break““case““catch““char““class“
“const““const_cast““continue““default““delete““do““double“
“dynamic_cast““else““enum““explicit““extern““false““float“
“for““friend““goto““if““inline““int““long“
“mutable““namespace““new““operator““private““protected““public“
“register““reinterpret_case““return““short““signed““sizeof““static“
“static_cast““struct““switch““template““this““throw““true“
“try““typedef““typeid““typename““union““unsigned““using“
“virtual““void““volatile““while“};//建立关键字指针数组
int search(char searchstr[]int wordtype) //标识符匹配
{
int p;
int i=0;
switch (wordtype)
{
case 1:
for(i=0;i<=59;i++)
{
if(strcmp(keyword[i]searchstr)==0) //字符串比较
{p=i+1; break;}
else p=0;
}
}
return(p);
}
char letterprocess(char ch)//字母处理函数
{
int i=-1;
char letter[20];
while(isalnum(ch)!=0||ch==‘_‘)//读取到的为数字或字母或下划线
{
letter[++i]=ch;
ch=fgetc(fp);
};
letter[i+1]=‘\0‘;
if(search(letter1))//查关键字表,找到为关键字,否则为标识符
{
printf(“(%s关键字)\n“letter);
}else{printf(“(%s标识符)\n“letter);}
return(ch);
}
char numberprocess(char ch)//数字处理函数
{
int i=-1;
char number[20];
while(isdigit(ch)||ch==‘.‘)//读取为数字或小数点
{
number[++i]=ch;
ch=fgetc(fp);
}
number[i+1]=‘\0‘;
printf(“(%s数字或小数点)\n“number);
return (ch);
}
char otherprocess(char ch){//处理非数字和字母函数
char other[20];
other[0]=ch;
other[1]=‘\0‘;
if(ch==‘{‘||ch==‘}‘||ch==‘(‘||ch==‘)‘||ch==‘‘||ch==‘;‘||ch==‘#‘||ch==‘“‘||ch==‘.‘)//分隔符识别
{
printf(“(%s分隔符)\n“other);
ch=fgetc(fp);
return(ch);
}
else if(ch==‘+‘||ch==‘*‘||ch==‘/‘||ch==‘%‘)//操作运算符识别
{
printf(“(%s操作运算符)\n“other);
ch=fgetc(fp);
return(ch);
}else if(ch==‘<‘||ch==‘>‘||ch==‘=‘||ch==‘!‘)//比较运算符识别
{
ch=fgetc(fp);//超前阅读,取其下一个字符,如为‘=’则将其写入数组中,否则只输出当前读取的字符
if(ch==‘=‘)
{
other[1]=ch;
other[2]=‘\0‘;
printf(“(%s比较运算符)\n“other);
return(ch);
}
else
{
printf(“(%s赋值运算符)\n“other);
return ch;
}
}else if(ch==‘&‘)//识别‘&’与‘&&’
{
ch=fgetc(fp);//超前阅读
if(ch==‘&‘)//如果其后一个字符为‘&’,则将其后一个字符也写入数组中并输出
{
other[1]=ch;
other[2]=‘\0‘;
printf(“(%s逻辑与运算符)\n“other);
return(ch);
}else
{
printf(“(%s地址与或按位与运算符)\n“other);
return(ch);
}
}else if(ch==‘\\‘)//识别‘\n’
{
ch=fgetc(fp);
if(ch==‘n‘)
{
other[1]=ch;
other[2]=‘\0‘;
printf(“(%s换行符)\n“other);
return(ch);
}
}else if(ch==‘-‘)//判断‘-’是负号还是减号
{
ch=fgetc((fp-1));//取其前一个字符,如果为数字则为减号,否则为负号
if(isdigit(ch))
{
ch=fgetc((fp+1));//指针回指到下一个字符,取下一个字符
other[1]=ch;
other[2]=‘\0‘;
printf(“(%s负号)\n“other);
return(ch);
}else
{
other[1]=ch;
ch=fgetc(fp);
other[2]=ch;
other[3]=‘\0‘;
printf(“(%s减号)\n“other);
ch=fgetc(fp);
re
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3893 2011-07-02 23:35 right\code.cpp
文件 3377 2011-06-17 23:17 right\code.dsp
文件 533 2011-06-18 00:03 right\code.dsw
文件 41984 2011-07-02 23:43 right\code.ncb
文件 48640 2011-07-02 23:43 right\code.opt
文件 1167 2011-07-02 23:35 right\code.plg
文件 184433 2011-07-02 23:35 right\Debug\code.exe
文件 20034 2011-07-02 23:35 right\Debug\code.obj
文件 476160 2011-07-02 23:35 right\Debug\code.pdb
文件 53248 2011-07-02 23:35 right\Debug\vc60.pdb
文件 50 2011-07-02 23:34 right\source.c
文件 44 2011-07-02 23:34 right\source.c.bak
目录 0 2011-07-20 18:56 right\Debug
目录 0 2011-07-02 23:43 right
----------- --------- ---------- ----- ----
833563 14
- 上一篇:飞鸽传书 Linux C编程项目
- 下一篇:变步长数值积分算法+动态演示
相关资源
- 软件学院编译原理第二次上机求firs
- 逆波兰表达式 c语言实现
- VC使用CStringArray类创建和使用字符串数
- 编译原理实验 DFA的最小化 c++代码
- 编译原理课程设计广工C语言
- 判断一个字符串是否是中心对称 C++描
- C++定义一个MyString类,实现两个字符串
- 编译原理课程设计——算术表达式、
- 广工编译原理课程设计 PL0C++改进需用
- 0513《编译原理》答案 设计并实现TI
- 字符串前后缀添加功能
- c++使用vector统计字符串中单词出现的
- 编译原理firstselectfollow实验源代码
- c语言实现的对任意长度的字符串加解
- 关键词检索 字符串检索
- 编译原理实验判断文法是不是LL1文法
- 实现简单银行叫号模拟系统(C++版)
- 编译原理Pascal语言编译器用C实现
- STM32F103ZET6 按键串口 发16进制[字符串
- Linux下c语言实现对文本内容的三种输
- 递归反转字符串带中文
- 编译原理PL0实验报告
- LZW编码 较短代码来表示较长字符串来
- [纯C语言 + Win32 API]一步一步写个围棋
- 编译原理正则表达式转NFA转DFA DFA最小
- 编译原理虎书课后习题解答
- 东北大学课程设计—编译原理课程设
- 字符串匹配算法详解 BM算法 c语言
- 编译原理-简单编译器课程设计C语言源
- 算术表达式C算法输入:一个算术表达
评论
共有 条评论