资源描述:
《编译原理 词法分析.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、#include#include//#include#include#include//creatastackstructstack_node{intx;inty;structstack_node*next;};typedefstack_nodestack_list;typedefstack_list*link;linkstack=0;//pushanelementvoidpush(intxx,intyy){linkne
2、w_node;new_node=(stack_list*)malloc(sizeof(stack_list));new_node->x=xx;new_node->y=yy;new_node->next=stack;stack=new_node;}//popanelementvoidpop(int&xx,int&yy){linktop;top=stack;xx=stack->x;yy=stack->y;stack=stack->next;free(top);}//filltheplotvoidfill(intx,
3、inty){intx0,y0,xl,xr,xlold,xrold;/*x0,y0用来标记x,y的值,xl记录x的最左值,xr记录x的最右值*/intgo=0,go2=0;inti=0;push(x,y);//种子像素入栈while(stack!=0)//如果栈不空则循环,stack==0表示栈空{go=0;//go只是一个标记pop(x,y);putpixel(x,y,RED);x0=x+1;while(getpixel(x0,y)!=RED)//fillright填充右边{putpixel(x0,y,RED)
4、;x0=x0+1;}xr=x0-1;//记录最右值xrold=xr;//再记录一次最右值,以备后用x0=x-1;while(getpixel(x0,y)!=RED)//fillright填充左边{putpixel(x0,y,RED);x0=x0-1;}xl=x0+1;//记录最左值xlold=xl;//再记录一次最左值,以备后用y0=y+1;//goup向上移一条扫描线go2=0;//go2也只是一个用来标记的变量while(xr>xl&&go==0)//查找上一条线的最右值,并记录为xr{if(getpixe
5、l(xr,y0)==RED){xr=xr-1;}else{go=1;//若go=1这句执行的话就说明找到了最右值,并在while中的go==0中判断并退出while}}while(xl6、xr,y0);//先将上一条线上的最右点作为种子点入栈for(i=xl;i7、e(xr>xl&&go==0)//找下一条线的最右{if(getpixel(xr,y0)!=4){go=1;}else{xr--;}}while(xl8、i-1,y0)!=RED){push(i-1,y0);}}}}}voidmain(){//voidfill(intx,inty);intgdriver,gmode;/*显示模式*/inti,j;intn,px,py,px0,py0,px1,py1;intya=0,yi=500;printf("pleasinputthenumberofthetoppoints:");scanf("%d"