语法分析 程序Word文档下载推荐.docx
- 文档编号:18628582
- 上传时间:2022-12-29
- 格式:DOCX
- 页数:15
- 大小:19.52KB
语法分析 程序Word文档下载推荐.docx
《语法分析 程序Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《语法分析 程序Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。
"
);
getch();
closegraph();
exit
(1);
intputhz24(intx,inty,intz,intcolor,doublem,doublen,char*p)
unsignedinti,c1,c2,f=0;
intrec,i1,i2,i3,i4,i5;
intm1,m2;
longl;
charby[72];
while((i=*p++)!
=0)
if(i>
0xa1)
if(f==0){c1=(i-0xa1)&
0x07f;
f=1;
}
else
c2=(i-0xa1)&
f=0;
rec=(c1-15)*94+c2;
l=rec*72L;
lseek(handle,l,SEEK_SET);
read(handle,by,72);
if((m>
=1)&
&
(n>
=1))
m1=m;
m2=n;
for(i1=0;
i1<
24*m1;
i1=i1+m1)
for(i4=0;
i4<
m1;
i4++)
for(i2=0;
i2<
=2;
i2++)
for(i3=0;
i3<
8;
i3++)
if(getbit(by[i1/m1*3+i2],7-i3))
for(i5=0;
i5<
m2;
i5++)
putpixel(x+i1+i4,y+i2*8*m2+i3*m2+i5,color);
else{
24;
i1++)
if(getbit(by[i1*3+i2],7-i3))
m1=i1*m;
m2=i2*8*n+i3*n;
putpixel(x+m1,y+m2,color);
x=x+24*m+z;
return(x);
intmenu()
inty,key1,key2,size,test;
void*buffer;
charc;
unsignedchar*m[]={"
文法输入"
"
项目集显示"
分析表显示"
字符串分析"
程序简介"
退出系统"
/*定义菜单*/
setbkcolor(BLUE);
cleardevice();
openhzk();
/*打开宋体字库*/
/*显示汉字*/
puthz24(110,40,8,12,2,2,"
语法分析模拟程序"
puthz24(240,100,5,5,1,1,"
制作人:
周清川"
puthz24(255,130,5,5,1,1,"
班级"
setcolor(5);
settextstyle(2,HORIZ_DIR,7);
outtextxy(333,130,"
4981-2"
close(handle);
setcolor(12);
setlinestyle(0,0,3);
rectangle(200,180,450,390);
/*画一矩形框*/
setfillstyle(1,3);
floodfill(250,200,12);
/*填充矩形框*/
/*打开点阵字库*/
/*显示菜单内容*/
puthz24(257,200,16,1,1,1,m[0]);
puthz24(255,230,7,1,1,1,m[1]);
puthz24(255,260,7,1,1,1,m[2]);
puthz24(255,290,7,1,1,1,m[3]);
puthz24(257,320,16,1,1,1,m[4]);
puthz24(257,350,16,1,1,1,m[5]);
size=imagesize(240,198,413,225);
buffer=malloc(size);
getimage(240,198,413,225,buffer);
putimage(240,198,buffer,NOT_PUT);
y=198;
while(key1!
=13)/*按回车键退出循环*/
while(bioskey
(1)==0);
/*等待键盘输入*/
key1=key2=bioskey(0);
/*取键盘输入码*/
key1=key1&
0xff;
/*只取ASCII码*/
key2=key2&
0xff?
0:
key2>
/*只取扩充码*/
if(key2==72||key2==80)
putimage(240,y,buffer,COPY_PUT);
/*恢复原有信息*/
if(key2==72)y=y==198?
348:
y-30;
/*上箭头处理*/
if(key2==80)y=y==348?
198:
y+30;
/*下箭头处理*/
getimage(240,y,413,y+27,buffer);
/*保存新位置色条大小的内容*/
putimage(240,y,buffer,NOT_PUT);
/*反像释放产生色条*/
test=(y-198)/30+1;
free(buffer);
/*释放内存*/
return(test);
voidwin(inti)
rectangle(23,80,615,400);
window(4,6,77,25);
clrscr();
setbkcolor(i);
intinsert(alph,ch)
charalph[10];
charch;
inti,temp=0;
for(i=0;
alph[i]!
='
'
;
i++)
if(ch==alph[i])temp=1;
if(temp==0){alph[i]=ch;
returni+1;
elsereturni;
voidfir(char*ct)
inti,j;
charc,s[10];
intm;
if(ct[0]=='
\0'
){flg=1;
return;
if(ct[0]<
'
A'
||ct[0]>
Z'
)
{search[mt++]=ct[0];
i<
n;
if(wf[i][0]==ct[0])
c=wf[i][3];
if(c=='
)fir(ct+1);
elseif(c<
||c>
)search[mt++]=c;
m=0;
for(j=3;
wf[i][j]!
j++)
s[m++]=wf[i][j];
s[m]='
fir(s);
voidclear()
inti,j,m;
search[i]!
for(j=i+1;
search[j]!
if(search[i]==search[j])
for(m=j;
m!
m++)
search[m]=search[m+1];
voidfirst(ct,cp)
char*ct,*cp;
mt=flg=0;
fir(ct);
if(flg)strcpy(search+mt,cp);
elsesearch[mt]='
clear();
intcheck(intll)/*检查是否有此规范族*/
inti,flag;
/*flag==1没有*/
structnode*p,*p1;
=ll;
flag=1;
if(hed->
id1==head[i]->
id1)
p=head[i]->
next;
while(p)
p1=hed->
while(p1)
if(p->
id2==p1->
id2&
strcmp(p->
sea,p1->
sea)==0&
p->
id1==p1->
id1)flag=0;
p1=p1->
if(flag==0)p=p->
elsebreak;
if(flag==0)return(i);
/*有相等的*/
}/*if*/
}/*for*/
return(-1);
intcheck1(p1,head1)
structnode*p1,*head1;
structnode*p;
inti=1;
p=head1->
if(strcmp(p->
buf,p1->
buf)==0&
p1->
id1==p->
return0;
p=p->
returni;
voidloop(structnode*head1)/*扩展规范族*/
charct[10];
structnode*p,*p1,*p2,*flag;
flag=p=head1->
ch=p->
buf[p->
id1];
while(p->
next)p=p->
loop1:
if(flag->
id1<
strlen(wf[flag->
id2])-1)
for(j=flag->
id1+1;
flag->
buf[j]!
ct[m++]=flag->
buf[j];
ct[m]='
if(ch>
ch<
for(i=1;
if(wf[i][0]==ch)
p1=(structnode*)malloc(LEN);
id1=3;
strcpy(p1->
buf,wf[i]);
first(ct,flag->
sea);
sea,search);
id2=i;
next=NULL;
if(check1(p1,head1)==1)
next=p1;
head1->
id1++;
p=p1;
flag=flag->
if(flag)
ch=flag->
buf[flag->
gotoloop1;
}/*loop1*/
voiddisplayxmj()/*显示项目集*/
inti,j,m=0,t=0;
rectangle(200,4,420,33);
puthz24(245,7,4,14,1,1,"
puthz24(460,410,5,14,0.7,0.7,"
按任意键继续"
win(4);
gotoxy(15*t+2,m+2);
I%d:
\n"
i);
m++;
if(m%19==0){m=0;
t++;
if(t==5&
m==0){getch();
t=0;
gotoxy(15*t+3,m+2);
"
for(j=0;
j<
id1;
%c"
p->
buf[j]);
."
for(j=p->
sea[j]!
if(j==0)printf("
%c"
sea[j]);
elseprintf("
/%c"
m==0){getch();
getch();
voidprint(inti)/*打印action*/
0&
i!
=111&
=222)printf("
s%d"
i);
if(i<
0)printf("
r%d"
-1*i);
if(i==111)printf("
接受"
if(i==222)printf("
出错"
voiddisplayfxb()/*显示分析表*/
inti,j,t;
chars[2];
win(6);
puthz24(30,85,2,15,1,1,"
状态"
puthz24(460,410,5,30,0.7,0.7,"
按任意键继续"
gotoxy(4+(2+e/2)*6,1);
ACTION"
gotoxy(6+(e+3)*6+f/2*6,1);
GOTO"
q=zhead->
i=0;
while(q)
gotoxy(11+i++*6,2);
q->
al);
q=q->
t=2;
if(t%20==0){t=1;
clrscr();
gotoxy(4,++t);
%d"
e+f+1;
gotoxy((j+1)*6+4,t);
if(fxb[i][j]!
=0&
=f)print(fxb[i][j]);
j>
f)printf("
fxb[i][j]);
intfind(charch)
if(q->
al==ch)return(q->
num);
voidfx()/*分析规约动作*/
id1==strlen(wf[p->
id2]))
{for(j=0;
id2==0)fxb[i][find(p->
sea[j])]=111;
else{if(fxb[i][find(p->
sea[j])]==0)
{fxb[i][find(p->
sea[j])]=-1*p->
id2;
continue;
if(fxb[i][find(p->
sea[j])]>
0)
产生移进规约冲突\n"
按任意键返回"
exit(0);
voidxmj()/*求项目集*/
structnode*p,*p1,*p2;
charcha[20];
inti,flag,j;
e+f;
e)cha[i]=nend[i];
elsecha[i]=end[i-e];
cha[e+f]='
head[0]=(structnode*)malloc(LEN);
buf,wf[0]);
sea,"
#"
id2=0;
head[0]->
id1=1;
loop(head[0]);
lop:
cha[i]!
p=head[flag1]->
j=0;
id1]==cha[i])
if(j==0)
p2=hed=(structnode*)malloc(LEN);
hed->
id1=0;
id1=p->
buf,p->
buf);
sea,p->
id2=p->
p2->
p2=p1;
j++;
if(j>
0){
loop(hed);
if(check(ll)==-1){head[++ll]=hed;
fxb[flag1][find(cha[i])]=ll;
if(check(ll)>
=0)fxb[flag1][find(cha[i])]=check(ll);
flag1++;
if(flag1<
=ll)gotolop;
voiddisplay()
structwang*w;
gotoxy(3,4);
步骤状态栈符号栈输入串ACTIONGOTO\n"
w=whead->
j=4;
while(w)
gotoxy(5,++j);
w->
step);
=w->
x;
gotoxy(13+i,j);
if(w->
state[i]<
10)printf("
state[i]);
(%d)"
gotoxy(22+i,j);
sym[i]);
gotoxy(34,j);
y;
for(i=w->
strlen(input);
input[i]);
gotoxy(44,j);
print(w->
action);
gotoxy(52,j);
go!
=0)printf("
go);
w=w->
voidfxgc()/*分析过程*/
structwang*w,*w1;
inti;
puthz24(250,7,4,14,1,1,"
win(9);
gotoxy(1,2);
请输入以#为结尾的字符串"
scanf("
%s"
input);
whead=w1=(structwang*)malloc(LEN2);
w=(structwang*)malloc(LEN2);
w->
step=1;
state[0]=0;
sym[0]='
#'
x=0;
y=0;
if(fxb[w->
state[w->
x]][find(input[w->
y])]==0)
{gotoxy(1,3);
printf("
此串不符合该文法"
action=222;
go=0;
return;
action=fxb[w->
y])];
w1->
next=w;
w1=w;
while(w1->
action!
=111)
=w1->
{w->
state[i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语法分析 程序