資源簡(jiǎn)介
編譯原理實(shí)驗(yàn)-詞法分析<br>用C語(yǔ)言寫的
代碼片段和文件信息
#include?“stdio.h“
#include“string.h“
#include?“stdlib.h“
FILE?*fp;
char?filename[20];
char?token[100];
int?m=0;
char?getch()
{
?????char?ch;
ch=fgetc(fp);
return?ch;
}
char?getbc(char?ch)
{
while(ch==‘?‘)?ch=getch();?
?????return?ch;
}
?void?concat(char?ch)
{
??token[m]=ch;
}
int?letter(char?ch)
{?if?(ch>=‘A‘&&ch<=‘Z‘)?return?1;
else?if(ch>=‘a(chǎn)‘&&ch<=‘z‘)?return?1;
else?return?0;
}
int?digit(char?ch)
{
????if(ch>=‘0‘&&ch<=‘9‘)?return?1;
else?return?0;
}
int?reserve()
{???int?g;
????if(??strcmp(token“begin“)==0)??g=1;
else?if(??strcmp(token“end“)==0)???g=2;
????else?if(??strcmp(token“if“)==0)???g=3;
????else?if(??strcmp(token“then“)==0)???g=4;
????else?if(??strcmp(token“else“)==0)???g=5;
????else?if(??strcmp(token“while“)==0)???g=6;
????else?if(??strcmp(token“do“)==0)???g=7;
else?g=10;
return?g;
}
void?dtb()//十進(jìn)制轉(zhuǎn)換函數(shù)
{
int?ij=0n=0a=0b[100];
n=0;
for(i=0;token[i]!=‘\0‘;i++)
{
a=a*10+((int)token[i]-48);
}
while(a!=0)
{
n=a%2;
b[j]=n;
j++;
a=a/2;
}
for(i=j-1;i>=0;i--)
printf(“%d“b[i]);
}
void?scaner(char?ch)
{ int?c;
??if(ch!=EOF)
??{ ch=getbc(ch);
if(letter(ch))
{
while(letter(ch)||digit(ch))
{
concat(ch);
m++;
ch=getch();
}
c=reserve();
if(c!=10)?printf(“%d??????%s\n“ctoken);
else?printf(“10?????%s\n“token);
}
else?if(digit(ch))
{
while(digit(ch))
{
????????????concat(ch);
m++;
ch=getch();
}
printf(“11?????“);
dtb();
printf(“\n“);
}
else
switch(ch)
{
case‘+‘:?printf(“13?????+\n“);break;
????????case‘-‘:?printf(“14?????-\n“);break;
????????case‘*‘:printf(“15?????*\n“);break;
????????case‘/‘:printf(“16?????/\n“);break;
case‘<‘:ch=getch();
if(ch==‘=‘)??printf(“17?????<=\n“);
else?if?(ch==‘>‘)?printf(“18?????<>\n“);
else?printf(“19?????<\n“);
break;
case‘:‘:ch=getch();
????????????if(ch==‘=‘)??printf(“22?????:=\n“);?????????
????????????else?printf(“21?????:\n“);
????????????break;
case‘;‘:?printf(“23?????;\n“);?break;
default:?printf(“error??%c\n“ch);
break;
}
??}
}
?void?main()
{char?ch;int?l;
printf(“input?filename:“);
scanf(“%s“filename);
fp=fopen(filename“r+“);
??do
{?
for(l=m;l>=0;l--)
{
token[l]=‘\0‘;
}
m=0;
??????ch=fgetc(fp);
???scaner(ch);
}while(ch!=EOF);
}
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件?????????64??2008-04-15?15:30??編譯原理\a.txt
?????文件???????2431??2008-04-15?15:28??編譯原理\詞法分析.cpp
?????目錄??????????0??2008-04-15?22:36??編譯原理
-----------?---------??----------?-----??----
?????????????????2495????????????????????3
評(píng)論
共有 條評(píng)論