- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
主要的代码如下(这里给出的是命令行代码,稍加修改就可以.doc
主要的代码如下(这里给出的是命令行代码,稍加修改就可以做成上面的界面了),具体请参考源文件:
#include
#include
#include
#include
#define MAX 18 //分析表的最大容量
#define MAXBUF 255
char ch = ; // 存放读入当前的输入字符
int lineno;
struct reserve //关键字
{
char lexptr[MAXBUF];
int token;
};
struct reserve symtable[MAX];
char * str[]={program,input,output,begin,end,var,integer,real,for,to,if,then,else,do,while,write,array,proceure };
void init() //对符号表进行初始化
{
for( int j=0; j18; j++)
{
strcpy(symtable[j].lexptr,str[j]);
symtable[j].token=j+3;
}
}
int search(char *temp)
{
for(int i=0; i {
if(!strcmp(symtable.lexptr ,temp))
{
return symtable.token;
}
}
return 0;
}
void analyse(FILE *fpin,FILE *fpout) //分析程序
{
char arr[MAXBUF];
int i=0;
int j=0;
while((ch=fgetc(fpin))!=EOF) //读入字符判断,空格、字母、数字、界符
{
if(ch== ||ch==\t)
{
}
else if(ch==\n) //如果是换行符,则行号加1
{
lineno++;
}
else if(isdigit(ch)) //如果是数字
{
while(isdigit(ch)) //判断和读取数字
{
arr[j]=ch;
j++;
ch=fgetc(fpin);
}
arr[j]=\0;
j=0;
fseek(fpin,-1L,SEEK_CUR);
fprintf(fpout,%s\t%d\n,arr,2) ;
}
else if (isalpha(ch)) //如果是字母
{
while(isalpha(ch)||isdigit(ch))
{
arr[j]=ch;
j++;
ch=fgetc(fpin);
}
fseek(fpin,-1L,SEEK_CUR);
arr[j]=\0;
j=0;
if (search(arr)) //如果是关键字
{
fprintf(fpout,%s\t%d\n,arr,search(arr));
}
else
fprintf(fpout,%s\t%d\n,arr,1); //普通标志符
}
else if(ch==:)
{
ch=fgetc(fpin);
if(ch===)
{
fprintf(fpout,%s\t%d\n,:=,29); //如果是 :=
}
else
{
fprintf(fpout,%s\t%d\n,:,30); //如果是 :
fseek(fpin,-1L,SEEK_CUR);
}
}
else if (ch==)
{
ch=fgetc(fpin);
if(ch===) //如果是 =
{
fprintf(fpout,%s\t%d\n,=,32);
}
else
{
fprintf(fpout,%s\t%d\n,,31); //如果是
fseek(fpin,-1L,SEEK_CUR);
}
}
else if(ch==)
{
ch=fgetc(fpin);
if(ch==)
{
fprintf(fpout,%s\t%d\n,,35); // 如果是
}
else if(ch===)
{
fprintf(fpout,%s\t%d\n,=,34); //如
原创力文档


文档评论(0)