编译程序文档格式.docx

上传人:b****1 文档编号:15315679 上传时间:2022-10-29 格式:DOCX 页数:14 大小:17.79KB
下载 相关 举报
编译程序文档格式.docx_第1页
第1页 / 共14页
编译程序文档格式.docx_第2页
第2页 / 共14页
编译程序文档格式.docx_第3页
第3页 / 共14页
编译程序文档格式.docx_第4页
第4页 / 共14页
编译程序文档格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

编译程序文档格式.docx

《编译程序文档格式.docx》由会员分享,可在线阅读,更多相关《编译程序文档格式.docx(14页珍藏版)》请在冰豆网上搜索。

编译程序文档格式.docx

charalphaprocess(charbuffer);

chardigitprocess(charbuffer);

charotherprocess(charbuffer);

//******************语法分析函数声明*************************************

voidfactor();

voidterm();

voidarithexp();

voidexp();

voidassign_stmt();

voidmatch();

voiderror();

//******************中间代码函数声明******************************************

voidinique(sqs*s);

intpush(sqs*s);

intpop(sqs*s);

voidmiddlecode();

voidprint();

voidoptimizecode();

//*****************************************************************************

//词法分析部分

FILE*fp;

//源文件

char*p;

charfilename[10];

intopenfile=1;

intline=1;

interror1=0;

intsource[buf][2];

intsounum=0;

chardigittp[20];

//关键字

char*key[32]={"

and"

"

array"

begin"

bool"

call"

case"

char"

constant"

do"

"

else"

end"

false"

for"

if"

input"

integer"

not"

of"

or"

output"

procedure"

program"

read"

real"

repeat"

set"

then"

true"

until"

var"

while"

write"

};

//符号表

char*character[21]={"

+"

-"

*"

/"

("

)"

:

="

<

>

/*"

*/"

.."

["

]"

;

`"

//常量表

char*integer[buf];

//标志符表

char*label[10];

intconstnum=0,labelnum=0;

//以上有5张表,储存了所有的信息,其中2维数组source储存的源程序的程序内容,

//前面四张表的次序依次为:

保留字表为1,符号表为2,常数表为3,标志符表为4;

charalphaprocess(charbuffer)//关键字和标识符处理子函数;

intnewid=1,id=1;

inti=-1;

charalphatp[20];

while((isalpha(buffer))||(isdigit(buffer)))

alphatp[++i]=buffer;

buffer=fgetc(fp);

}

alphatp[i+1]='

\0'

//寻找保留字

i=0;

intre=0;

while(i<

32&

&

re==0)

{if(strcmp(key[i],alphatp)==0)

{//printf("

\n\t保留字:

%s"

key[i]);

source[sounum][0]=1;

//将保留字的位置放入数组之中

source[sounum][1]=i;

sounum++;

id=0;

re=1;

i++;

//标志符处理

if(id==1)

{for(i=0;

i<

labelnum;

i++)

{if(strcmp(label[i],alphatp)==0)

{source[sounum][0]=4;

//将标志符的位置放入数组之中

newid=0;

if(newid==1)//开辟标志符新量

{label[labelnum]=(char*)malloc(sizeof(alphatp));

strcpy(label[labelnum],alphatp);

source[sounum][0]=4;

source[sounum][1]=labelnum;

labelnum++;

return(buffer);

chardigitprocess(charbuffer)//数字处理函数

{intnewnum=1;

while((isdigit(buffer)))

digittp[++i]=buffer;

digittp[i+1]='

for(i=0;

constnum;

{if(strcmp(integer[i],digittp)==0)

{source[sounum][0]=3;

newnum=0;

if(newnum==1)

{integer[constnum]=(char*)malloc(sizeof(digittp));

strcpy(integer[constnum],digittp);

source[sounum][0]=3;

source[sounum][1]=constnum;

constnum++;

charotherprocess(charbuffer)//:

其他字符处理函数;

charbuff1;

if(buffer=='

\n'

)//将行号标志符存入数组

{line++;

source[sounum][0]=5;

//行号以5作为标记

source[sounum][1]=line;

return(buffer);

elseif(buffer=='

'

{buffer=fgetc(fp);

while(buffer=='

{buffer=fgetc(fp);

buff1=buffer;

return(buff1);

else

{charbuffer1,buffer2,buffer3[3];

buffer1=buffer;

buffer2=fgetc(fp);

//处理双字符的符号

if(buffer2=='

'

||buffer2=='

='

.'

{buffer3[0]=buffer1;

buffer3[1]=buffer2;

buffer3[2]='

inti=0;

intre=0,id=0;

21&

{if(strcmp(character[i],buffer3)==0)

\n\t特殊字符:

character[i]);

source[sounum][0]=2;

//将特殊字符的位置放入数组之中

id=1;

if(id==0)

{printf("

\n字符错误,在%d行-->

line,buffer1);

error1++;

buffer1=fgetc(fp);

return(buffer1);

//处理单字符的符号

buffer3[1]='

intid=0;

line,buffer3);

error1++;

return(buffer2);

voidscan()

{charcbuffer;

printf("

\n请输入文件名:

);

scanf("

&

filename);

p=filename;

if((fp=fopen(p,"

r"

))==NULL)

\n很抱歉,该文件打不开,请选择另一个!

\n"

openfile=0;

{cbuffer=fgetc(fp);

while(cbuffer!

=EOF)

if(isalpha(cbuffer))

cbuffer=alphaprocess(cbuffer);

elseif(isdigit(cbuffer))

cbuffer=digitprocess(cbuffer);

elseif(cbuffer=='

/'

)//处理注释

cbuffer=fgetc

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1