资源简介
可以实现的功能:识别关键字,普通标识符,文件形式输入输出,过滤空格、注释等功能
代码片段和文件信息
#include
#include
#include
#include
#include
#include
using namespace std;
char *Key[11]={“if““do““else““int““for““while““return““break““continue“};//定义关键字(保留字)
char Word[20]ch;//存储识别出的单词流
int syn;
int IsAlpha(char c) //判断是否为字母
{
if(((c<=‘z‘)&&(c>=‘a‘))||((c<=‘Z‘)&&(c>=‘A‘)))
return 1;//如果是字母,返回1
else
return 0;//如果不是字母,返回0
}
int IsNum(char c)//判断是否为数字
{
if(c>=‘0‘&&c<=‘9‘)
return 1;//如果是数字,返回1
else
return 0;//如果不是数字,返回0
}
int IsKey(char *Word)//识别关键字函数
{
int mi;
for(i=0;i<9;i++)
{
if((m=strcmp(WordKey[i]))==0)
return 1;//如果是关键字,返回1
}
return 0;
}
void scanner(FILE *fpFILE *hp)//扫描函数,*fp是个指针
{
//int k=0;
char Word[20]={‘\0‘};
char ch;
int ic;
ch=fgetc(fp);//获取字符,指针fp并自动指向下一个字符
if(IsAlpha(ch)) //判断该字符是否是字母,调用IsAlpha函数,ch传递参数
{
Word[0]=ch;//Word数组存储字符串的输出流
ch=fgetc(fp);
i=1;
while(IsNum(ch)||IsAlpha(ch))//判断该字符是否是字母或数字
{
Word[i]=ch;
i++;//指针后移
ch=fgetc(fp);//ch是指针指向的内容
}
Word[i]=‘\0‘;//‘\0‘ 代表字符结束(空格)
fseek(fp-11);//回退一个字符
c=IsKey(Word);//判断是否是关键字,传递的是一个指针,根据返回的值进行下面的判断
if(c==0)//不是关键字
{
syn=1;//普通标识符
printf(“(%d%s)\n“synWord);
fprintf(hp“(%d%s)\n“synWord);
}
else
{
syn=3;//关键字
printf(“(%d%s)\n“synWord);
fprintf(hp“(%d%s)\n“synWord);
}
}
else//开始判断的字符不是字母
if(IsNum(ch))//判断是否是数字
{
Word[0]=ch;
ch=fgetc(fp);
i=1;
while(IsNum(ch)||ch==‘.‘||ch==‘e‘||ch==‘-‘)
{ Word[i]=ch;
i++;
ch=fgetc(fp);
}
Word[i]=‘\0‘;//\0是字符串结束标志
fseek(fp-11);//回退
syn=2;//无符号实数
printf(“(%d%s)\n“synWord);
fprintf(hp“(%d%s)\n“synWord);
}
else//开始判断的字符不是字母也不是数字
{
Word[0]=ch;
switch(ch)
{
case‘(‘:
case‘)‘:
case‘{‘:
case‘}‘:
case‘‘:
case‘;‘:
syn=5;//界符
printf(“(%d%s)\n“synWord);
fprintf(hp“(%d%s)\n“synWord);
break;
case‘+‘:
syn=4; //判断结果为“+“
printf(“(%d%s)\n“synWord);
fprintf(hp“(%d%s)\n“synWord);
break;
case‘-‘:
syn=4; //判断结果为“-“
printf(“(%d%s)\n“synWord);
fprintf(hp“(%d%s)\n“synWord);
break;
case‘*‘:
syn=4;//判断结果是*
printf(“(%d%s)\n“synWord);
fprintf(hp“(%d%s)\n“synWord);
break;
case‘/‘:
ch=fgetc(fp);
Word[1]=ch;
if(ch==‘/‘)
{
i=1;
while(ch!=‘\n‘)
{
Word[i]=ch;
i++;
ch=fgetc(fp);
}
{}
}
else
{
if(ch==‘*‘)
{
i=1;
Word[i]=ch;
i++;
ch=fgetc(fp);
while(ch!=‘#‘)
{
if(ch==‘*‘)
{
Word[i]=ch;
ch=fgetc(fp);
if(ch==‘/‘)
{
printf(“此行为注释!\n“);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 247 2011-04-18 23:27 词法分析器\out.txt
文件 6065 2011-04-18 21:58 词法分析器\wangmx.cpp
文件 3401 2011-04-12 19:49 词法分析器\wangmx.dsp
文件 520 2011-04-12 19:50 词法分析器\wangmx.dsw
文件 50176 2011-04-18 23:27 词法分析器\wangmx.ncb
文件 48640 2011-04-18 23:27 词法分析器\wangmx.opt
文件 246 2011-04-18 23:26 词法分析器\wangmx.plg
..A..H. 162 2011-04-09 15:56 词法分析器\~$一__识别无符号数的词法分析器设计实现.doc
..A..H. 162 2011-04-09 14:40 词法分析器\~$原理词法分析器.doc
..A..H. 162 2011-04-09 15:06 词法分析器\~$验一词法分析.doc
..A..H. 162 2011-04-09 15:02 词法分析器\~$验实现了一个c语言词法分析器内容说明注释完整包含可运行代码.doc
文件 101940 2011-04-18 22:00 词法分析器\截图\输入1.JPG
文件 52857 2011-04-18 21:23 词法分析器\截图\输入2.jpg
文件 38732 2011-04-18 21:30 词法分析器\截图\输入3.jpg
文件 51854 2011-04-18 21:32 词法分析器\截图\输入4.jpg
文件 97258 2011-04-18 22:01 词法分析器\截图\输出1.JPG
文件 39148 2011-04-18 21:29 词法分析器\截图\输出2.jpg
文件 29101 2011-04-18 21:30 词法分析器\截图\输出3.jpg
文件 46955 2011-04-18 21:33 词法分析器\截图\输出4.jpg
..A.SH. 22016 2011-05-14 10:12 词法分析器\截图\Thumbs.db
文件 106 2011-04-18 21:51 词法分析器\test\test1.cpp
文件 89 2011-04-18 20:27 词法分析器\test\test2.txt
文件 69 2011-04-16 14:50 词法分析器\test\test3.txt
文件 169 2011-04-18 21:17 词法分析器\test\test4.txt
文件 74752 2011-04-18 23:26 词法分析器\Debug\vc60.idb
文件 118784 2011-04-18 21:58 词法分析器\Debug\vc60.pdb
文件 184409 2011-04-18 21:58 词法分析器\Debug\wangmx.exe
文件 1065360 2011-04-18 21:58 词法分析器\Debug\wangmx.ilk
文件 19399 2011-04-18 21:58 词法分析器\Debug\wangmx.obj
文件 43520 2011-04-08 15:04 词法分析器\Debug\wangmx.opt
............此处省略9个文件信息
- 上一篇:计算机算法设计与分析第4版
- 下一篇:数据结构习题与解析完整版本唐发根版
评论
共有 条评论