c语言编写的词法分析程序Word格式.docx
- 文档编号:16134606
- 上传时间:2022-11-20
- 格式:DOCX
- 页数:17
- 大小:16.60KB
c语言编写的词法分析程序Word格式.docx
《c语言编写的词法分析程序Word格式.docx》由会员分享,可在线阅读,更多相关《c语言编写的词法分析程序Word格式.docx(17页珍藏版)》请在冰豆网上搜索。
K'
//关键字
#defineDIGIT'
n'
//数字,包括小数
#defineDOTH'
d'
//头文件,“.h”文件
#defineINT'
t'
#defineVOID'
v'
#defineIF'
f'
#defineELSE'
e'
#defineWHILE'
w'
#defineFOR'
r'
#defineMAIN'
m'
#definePRINTF'
p'
#defineINCLUDE'
u'
#defineFLOAT'
l'
#defineKEYNUM10
#defineBOUNDNUM8
#defineOPERNUM7
#defineVALUENUM100
/************************************************************************/
/*datatype*/
structbianliang
{
intid;
charname[20];
intvalue;
};
structchangliang
intdata;
charKeyWord[KEYNUM][8]={"
int"
"
void"
if"
else"
while"
for"
main"
printf"
include"
float"
charBoundary[BOUNDNUM]={'
"
'
'
;
('
)'
#'
{'
}'
charOperation[OPERNUM]={'
+'
-'
*'
/'
='
<
>
charLogogram[KEYNUM]={INT,VOID,IF,ELSE,WHILE,FOR,MAIN,PRINTF,INCLUDE,FLOAT};
charValue[VALUENUM][8];
intValue_n=0;
intErrorLine=0;
intQuotationCount=0;
//计算引号的数量
intQuotationFlag=0;
//引号数量为奇数时为1,偶数时为0
charLastOpera=0;
//用于判断"
=="
号存前一个"
="
号
/*functiondescribe*/
intisKeyWord(char*s)//是关键字返回1,否则返回0
inti;
for(i=0;
i<
KEYNUM;
i++)
{
if(strcmp(KeyWord[i],s)==0)
returni+1;
}
return0;
}
intisBoundary(charch)//是界符
BOUNDNUM;
if(Boundary[i]==ch)
intisOperation(charch)//是运算符
OPERNUM;
if(Operation[i]==ch)
intisDigit(char*s)//是数字
inti,l=strlen(s);
l;
if(!
isdigit(s[i]))
break;
if(i>
=l)
return1;
else
if('
.'
==s[i])
i++;
for(;
else
intisDotH(char*s)//是头文件
isalpha(s[i]))
if(s[i]=='
h'
)
intisWord(char*s)//是标识符
inti=0,l=strlen(s);
if(isalpha(s[i]))
isalnum(s[i]))
voidisWhat(int*i,char*str,FILE*fileOutput,FILE*fileOutput2)//判断字符串,并把相应类型存入文件
intn;
structbianliangtemp;
structchangliangt;
FILE*file=fopen("
num.txt"
ab"
);
if(1!
=*i)
str[--(*i)]='
\0'
if(n=isKeyWord(str))
fputs(str,fileOutput);
fputc('
\t'
fileOutput);
fputc(KEY_WORD,fileOutput);
if(isKeyWord(str)>
9)
fputc(isKeyWord(str)+'
a'
-10,fileOutput);
0'
fputc(Logogram[n-1],fileOutput);
\n'
elseif(isWord(str))
fputc(WORD,fileOutput);
for(n=0;
n<
Value_n;
n++)
if(0==strcmp(Value[n],str))
if(n==Value_n)
n=++Value_n;
strcpy(Value[n-1],str);
temp.id=n-1;
strcpy(temp.name,str);
temp.value=0;
fwrite(&
temp,sizeof(structbianliang),1,fileOutput2);
+n,fileOutput);
}
+n+1,fileOutput);
i'
elseif(isDotH(str))
fputc(DOTH,fileOutput);
elseif(isDigit(str))
fputc(DIGIT,fileOutput);
t.data=atoi(str);
t,sizeof(structchangliang),1,file);
(*i)=0;
fclose(file);
voidwriteMessage(FILE*f)
fputs("
字符\t类型\t附加值\t缩写\n"
f);
voiderror()
printf("
%dlineerror!
\n"
ErrorLine);
exit
(1);
/*main*/
voidmain()
FILE*fileInput;
FILE*fileOutput;
FILE*fileOutput2;
charch,qtemp;
charstr[20];
intflag=0;
fileInput=fopen("
1.cpp"
r"
fileOutput=fopen("
object.txt"
w"
fileOutput2=fopen("
variable.txt"
writeMessage(fileOutput);
if(NULL!
=fileInput)
i=0;
do
ch=fgetc(fileInput);
s
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 编写 词法 分析 程序