亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? decl.c

?? 本程序集是Allen I. Holub所寫的《Compiler Design in C》一書的附隨軟件
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
 * This determines if another variable is being declared of the same type
 */
{       return st == star || st == id || st == openpa ||
                st == openbr;
}

void declenum(TABLE *table)
/*
 * declare enums
 */
{       SYM     *sp;
        TYP     *tp;
				char *nm;
        if( lastst == id) {
/* tagged */
                if((sp = search(nm = litlate(lastid),&tagtable)) == 0) {
                        sp = xalloc(sizeof(SYM));
                        sp->tp = xalloc(sizeof(TYP));
                        sp->tp->type = bt_enum;
                        sp->tp->size = 2;
                        sp->tp->lst.head = sp->tp->btp = 0;
                        sp->storage_class = sc_type;
                        sp->name = nm;
                        sp->tp->sname = sp->name;
												sp->tp->bits = sp->tp->startbit = -1;
#ifdef CPLUSPLUS
												/* tags are also typedefs in C++ */
												if (prm_cplusplus)
													insert(sp,active_table);
#endif
                        getsym();
                        if( lastst != begin)
                                generror(ERR_PUNCT,begin,skm_declend);
                        else    {
                                insert(sp,&tagtable);
                                getsym();
                                enumbody(table);
                                }
                        }
                else
                        getsym();
                head = sp->tp;
                }
        else    {
/* untagged */
                tp = xalloc(sizeof(TYP));
                tp->type = bt_enum;
                tp->lst.head = tp->btp = 0;
								tp->size = 2;
								tp->bits = tp->startbit = -1;
								tp->sname = 0;
                if( lastst != begin)
                        generror(ERR_PUNCT,begin,skm_declend);
                else    {
                        getsym();
                        enumbody(table);
                        }
                head = tp;
                }
}

void enumbody(TABLE *table)
/*
 * read the enumeration constants in
 */
{       long     evalue;
        SYM     *sp;
        evalue = 0;
        while(lastst == id) {
                sp = xalloc(sizeof(SYM));
                sp->value.i = evalue++;
                sp->name = litlate(lastid);
                sp->storage_class = sc_const;
                sp->tp = &stdconst;
                insert(sp,active_table);
                getsym();
								if (lastst == assign) {
										getsym();
										evalue = sp->value.i = intexpr(0);
										sp->value.i = evalue++;
										if (sp->value.i < SHRT_MIN || sp->value.i >SHRT_MAX)
											generror(ERR_CONSTTOOLARGE,0,0);
								}
                if( lastst == comma)
                        getsym();
                else if(lastst != end)
                        break;
                }
        needpunc(end,skm_declend);
}

void declstruct(TABLE *table, int ztype, int flags)
/*
 * declare a structure or union type
 */
{       SYM     *sp;
        TYP     *tp;
				char *nm = litlate(lastid);
        if(lastst == id) {
/* tagged */
                if((sp = search(nm,&tagtable)) == 0) {
/* if tag was never defined */
                        sp = xalloc(sizeof(SYM));
                        sp->name = nm;
                        sp->tp = xalloc(sizeof(TYP));
                        sp->tp->type = ztype;
                        sp->tp->lst.head = 0;
                        sp->storage_class = sc_type;
                        sp->tp->sname = sp->name;
												sp->tp->cflags = flags;
												sp->tp->uflags = UF_DEFINED;
												sp->tp->size = 0;
#ifdef CPLUSPLUS
												/* tags are also typedefs in C++ */
												if (prm_cplusplus)
													insert(sp,table);
#endif
                        getsym();
                        if(lastst != begin) {
                                insert(sp,&tagtable);
/*																if (lastst != semicolon)
																	generror(ERR_PUNCT,semicolon,skm_declend);
*/												}
                        else    {
                                insert(sp,&tagtable);
                                getsym();
                                structbody(sp->tp,sp->name,ztype);
                                }
                        }
                else {
/* Allow redefinition if it was forward declared */
                        getsym();
												if (lastst == begin) {
													getsym();
													if (sp->tp->size == 0) 
														structbody(sp->tp,sp->name,ztype);
													else {
														gensymerror(ERR_DUPSYM,sp->name);
														expskim(skm_declclosebr);
													}
												}
								}
								if (flags & (DF_CONST | DF_VOL))
									head = copytype(sp->tp,flags);
								else
                	head = sp->tp;
								head->bits = head->startbit = -1;
                }
        else    {
/* untagged */
                tp = xalloc(sizeof(TYP));
                tp->type = ztype;
								tp->cflags = flags;
								tp->uflags = UF_DEFINED;
                tp->sname = 0;
                tp->lst.head = 0;
								tp->bits = tp->startbit =-1;
                if( lastst != begin)
                       	generror(ERR_PUNCT,begin,skm_declend);
                else    {
                        getsym();
                        structbody(tp,tn_unnamed,ztype);
                        }
                head = tp;
                }
}

void structbody(TYP *tp,char  *name,int ztype)
/*
 * read in the structure/union elements and calculate the total size
 */
{       int     slc;
        slc = 0;
        tp->val_flag = 1;
				tp->uflags &= ~UF_CANASSIGN;
        while( lastst != end) {
								int flags=0;
                if(ztype == bt_struct)
                        slc += declare2(&tp->lst,sc_member,ztype,flags,slc);
                else
                        slc = imax(slc,declare2(&tp->lst,sc_member,ztype,flags,0));
								if (tp->lst.tail->tp->type == bt_ref)
									genclasserror(ERR_REFNOCONS,name,tp->lst.tail->name);
								tp->lst.tail->tp->uflags |= UF_DEFINED;
                }
				if (!prm_packing)
        	tp->size = (slc+strucadd)&strucmod;
				else
					tp->size = slc;
        getsym();
}
void check_used(void)
/*
 * At the end of compilition we check for some common cases where 
 * module-scoped variables are either missing or unused
 */
{
				int i;
				SYM *sp;
					for (i=0; i < HASHTABLESIZE; i++) {
						if ((sp=(SYM *) globalhash[i]) != 0) {
							while (sp) {
								if (sp->storage_class == sc_static)
									if (sp->tp->uflags & UF_USED) {
										if (sp->tp->type == bt_func)
											gensymerror(ERR_NOSTATICFUNC,sp->name);
									}
									else
										if (sp->tp->type == bt_ifunc || sp->tp->type == bt_func)
											gensymerror(ERR_FUNCUNUSED,sp->name);
										else
											gensymerror(ERR_STATICSYMUNUSED,sp->name);
								sp = sp->next;
							}
						}
					}
				sp = tagtable.head;
				while (sp) {
					if (sp->tp->size == 0) 
						gensymerror(ERR_NEVERSTRUCT,sp->name);
					sp = sp->next;
				}
}
void compile(void)
/*
 * Main compiler routine
 */
{       while(lastst != eof) {
                dodecl(sc_global);
								if (lastst != eof) {
									generror(ERR_DECLEXPECT,0,0);
									getsym();
								}
        }
        flush_peep();
				dumplits();
				initrundown();
				dumpstartups();
				check_used();
				putexterns();
}

void dodecl(int defclass)
/*
 * Declarations come here, ALWAYS
 */
{
				SYM *sp;
				int flags = 0;
				long val;
				char *nm;
				cbautoinithead = 0;
        for(;;) {
						ispascal = FALSE;
            switch(lastst) {
								case semicolon:
												getsym();
												break;
								case kw_typedef:
												getsym();
												if (defclass == sc_global)
													declare(&gsyms,sc_type,bt_struct, 0);
												else
													declare(&lsyms,sc_type,bt_struct, 0);
												break;
                case kw_register:
                        if( defclass != sc_auto || flags & DF_VOL) {
                          gensymerror(ERR_ILLCLASS,lastid);
                        	getsym();
												}
												else  {
                        	getsym();
          	                  declare(&lsyms,sc_autoreg,bt_struct,flags | DF_AUTOREG);
												};
										break;
                case id:
										if (defclass == sc_auto)
												if (!(((sp = search(nm = litlate(lastid),&gsyms)) != 0 && sp->storage_class == sc_type)
												     || ((sp = search(nm,&lsyms)) != 0 && sp->storage_class == sc_type)))
													return;
								case kw_volatile:
								case kw_const:
                case kw_char: case kw_int: case kw_short: case kw_unsigned:
                case kw_long: case kw_struct: case kw_union: case kw_signed:
                case kw_enum: case kw_void:
                case kw_float: case kw_double:
                    if( defclass == sc_global)
                            declare(&gsyms,sc_global,bt_struct,flags | DF_GLOBAL);
                    else if( defclass == sc_auto)
                            declare(&lsyms,sc_auto,bt_struct,flags);
                    else
                        declare(&lsyms,sc_auto,bt_struct,flags);
                    break;
                case kw_static:
                        if( defclass == sc_member) {
                           gensymerror(ERR_ILLCLASS,lastid);
														getsym();
														break;
												}
												getsym();
												if( defclass == sc_auto)
														declare(&lsyms,sc_static,bt_struct,flags | DF_GLOBAL);
												else
														declare(&gsyms,sc_static,bt_struct,flags | DF_GLOBAL);
                        break;
                case kw_extern: {
												int thismangle = FALSE;
                        getsym();
#ifdef CPLUSPLUS
												if (prm_cplusplus && lastst == sconst) {
													if (!strcmp(laststr,Cstr)) {
														mangleflag = FALSE;
														manglelevel++;
														getsym();
														if (lastst == begin) {
															getsym();
														  thismangle = FALSE;
														}
														else thismangle = TRUE;
													}
												}
#endif
                        if( defclass == sc_member) {
                            gensymerror(ERR_ILLCLASS,lastid);
														break;
												}
                        ++global_flag;
                        declare(&gsyms,sc_external,bt_struct,flags);
                        --global_flag;
												if (thismangle && !--manglelevel)
													mangleflag = TRUE;
												}
                        break;
								case end:
#ifdef CPLUSPLUS
												if (prm_cplusplus && manglelevel) {
													mangleflag = (!--manglelevel);
													getsym();
													continue;
												}
#endif
												return;
								case kw__interrupt:
												intflag = 1;
												flags |= DF_INT;
												getsym();
												continue;
								case kw__abs:
												++global_flag;
												getsym();
												if (lastst != openpa) {
													generror(ERR_PUNCT,openpa,0);
												}
												else {
													getsym();
													val = intexpr(0);
													if (lastst != closepa)
														generror(ERR_PUNCT,closepa,skm_declclosepa);
												}
												getsym();
												declare2(&gsyms,sc_abs,bt_struct,flags,val);
												--global_flag;
												break;
                default:
                        return;
                }
						flags = 0;
						intflag = 0;
            }
}
void doargdecl(int defclass, char *names[], int *nparms, TABLE *table, int isinline)
/*
 * Function arguments are declared here
 */
{
				SYM *sp;
				int flags = isinline ? DF_FUNCPARMS : 0;
        for(;;) {
            switch(lastst) {
								case ellipse: {
									sprintf(declid,"**ELLIPSE%d**",pcount++);
									sp = xalloc(sizeof(SYM));
									sp->name = litlate(declid);
                  sp->storage_class = sc_auto;
									sp->tp = maketype(bt_ellipse,0);
									sp->tp->uflags |= UF_DEFINED | UF_USED;
									insert(sp,table);
									if (ispascal)
										generror(ERR_PASCAL_NO_ELLIPSE,0,0);
									getsym();
									goto exit;
								}
								case kw_const:
								case id:
                case kw_char: case kw_int: case kw_short: case kw_unsigned:
                case kw_long: case kw_struct: case kw_union: case kw_signed:
                case kw_enum: case kw_void:
                case kw_float: case kw_double:
                    declare(table,sc_auto,bt_struct,flags);
                    break;
                case kw_static:
								case kw_auto:
								case kw_register:
                        gensymerror(ERR_ILLCLASS,lastid);
                        getsym();
												continue;
                default:
												goto exit;
                }
							if (isinline) {
								names[(*nparms)++] = litlate(declid);
							}
						
				flags &= ~DF_CONST;
				}
exit:
#ifdef CPLUSPLUS
		if (prm_cplusplus) {
			SYM *sp = table->head;
			int found = FALSE;
			while (sp) {
				if (sp->defalt)
					found = TRUE;
				else 
					if (found)
						gensymerror(ERR_MISSINGDEFAULT,sp->name);
				sp = sp->next;
			}
		}
#endif
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
波多野结衣中文字幕一区| 欧美精品vⅰdeose4hd| 欧美综合色免费| 精品国产不卡一区二区三区| 中文字幕在线视频一区| 日韩精品免费专区| 色综合久久久久久久| 精品国产一二三| 亚洲va天堂va国产va久| 国产盗摄女厕一区二区三区| 欧美精品高清视频| 亚洲欧美日本韩国| 成人午夜激情影院| 日韩精品一区二区三区中文精品| 亚洲欧美自拍偷拍| 懂色av一区二区在线播放| 欧美tk—视频vk| 全部av―极品视觉盛宴亚洲| 在线一区二区三区四区五区 | 欧美写真视频网站| 国产精品国产三级国产| 国产高清精品网站| 日韩免费看网站| 久久黄色级2电影| 欧美一区二区三区免费观看视频| 亚洲欧美国产毛片在线| 99在线热播精品免费| 中文无字幕一区二区三区| 国产精品一区二区不卡| 久久蜜桃香蕉精品一区二区三区| 美国十次综合导航| 日韩一区二区在线观看视频播放| 亚洲一区免费观看| 欧美视频一区二区三区| 亚洲一级电影视频| 欧美精品一二三区| 天堂久久一区二区三区| 在线不卡欧美精品一区二区三区| 亚洲国产中文字幕在线视频综合 | 亚洲二区在线观看| 欧美日高清视频| 丝袜诱惑亚洲看片| 欧美一区二区日韩一区二区| 日本视频一区二区| 日韩精品一区二区三区中文不卡| 久久精品国产精品亚洲红杏| 日韩精品一区二区三区在线观看 | 国产成人在线网站| 国产精品女主播av| 在线观看成人免费视频| 五月综合激情婷婷六月色窝| 91精品啪在线观看国产60岁| 精品一区二区在线看| 欧美精品一区二区三区蜜桃视频 | 欧美激情一区二区三区在线| www.久久精品| 亚洲影院理伦片| 3atv在线一区二区三区| 精品一区二区久久| 亚洲欧洲日产国码二区| 欧美日韩综合色| 国产又粗又猛又爽又黄91精品| 欧美经典一区二区| 色国产精品一区在线观看| 日本成人在线电影网| 中文字幕在线观看不卡| 欧美日韩色一区| 国产在线播放一区二区三区| 亚洲欧美激情插| 欧美一二三四在线| 91在线精品一区二区三区| 日韩精品免费专区| 国产精品免费看片| 欧美男同性恋视频网站| 国产不卡在线一区| 日韩精品亚洲一区二区三区免费| 欧美国产精品一区二区三区| 欧美在线观看你懂的| 国产精品1区2区| 天堂蜜桃一区二区三区| 国产精品热久久久久夜色精品三区| 色综合久久久久综合体桃花网| 日韩精品色哟哟| 亚洲男同1069视频| 久久久一区二区三区捆绑**| 欧美日韩一本到| 成人av网站免费观看| 毛片基地黄久久久久久天堂| 亚洲欧美另类小说视频| 国产日韩欧美一区二区三区乱码| 欧美精品tushy高清| 91啦中文在线观看| 粉嫩蜜臀av国产精品网站| 日日夜夜一区二区| 一区二区欧美精品| 国产精品国产a| 久久亚洲一级片| 91麻豆精品91久久久久久清纯| 99麻豆久久久国产精品免费| 久久精品99国产国产精| 日韩精品高清不卡| 亚洲成人在线网站| ...中文天堂在线一区| 久久久久国产成人精品亚洲午夜| 欧美高清www午色夜在线视频| 欧美网站大全在线观看| 99国产精品久久久久久久久久久| 国产激情偷乱视频一区二区三区| 日本中文字幕一区二区有限公司| 亚洲国产精品自拍| 一区二区三区免费在线观看| 《视频一区视频二区| 中文字幕永久在线不卡| 国产精品家庭影院| 中文字幕日韩av资源站| 国产精品久久久久久户外露出| 久久久久久久综合色一本| 久久久久99精品一区| 精品粉嫩超白一线天av| 精品成人免费观看| 国产日韩欧美不卡在线| 日本一区二区成人| 国产精品午夜免费| 亚洲人亚洲人成电影网站色| 中文字幕一区二| 一区二区三区日韩| 日本女人一区二区三区| 久久精品国产亚洲a| 国产成人在线电影| av电影在线观看不卡| 91久久免费观看| 69成人精品免费视频| 日韩午夜精品视频| 久久精品夜色噜噜亚洲aⅴ| 欧美国产一区二区| 夜夜嗨av一区二区三区四季av| 一区二区欧美在线观看| 美女精品一区二区| 国产成人av电影在线播放| 成人黄色电影在线| 欧美日韩一区在线| 精品日韩一区二区| 一区在线观看免费| 日韩主播视频在线| 国产美女精品人人做人人爽| 成人av免费在线观看| 欧美性videosxxxxx| 亚洲精品一区二区三区四区高清 | 91在线观看美女| 欧美三级在线播放| 精品久久五月天| 亚洲精品一二三区| 五月天久久比比资源色| 久久99久久99小草精品免视看| 高清在线观看日韩| 在线电影院国产精品| 国产网站一区二区| 亚洲一区二区av电影| 精品一区二区三区不卡| 一本到高清视频免费精品| 在线不卡的av| 中文字幕在线一区二区三区| 日韩成人精品在线观看| kk眼镜猥琐国模调教系列一区二区 | 成人激情图片网| 欧美久久久久久久久中文字幕| 欧美激情一区二区三区四区| 视频一区二区三区入口| 成人小视频免费在线观看| 欧美精品在线视频| 亚洲人成电影网站色mp4| 久久99精品网久久| 欧美精品九九99久久| **欧美大码日韩| 国产91精品一区二区麻豆网站| 欧美一区二区福利在线| 一区二区欧美精品| 北岛玲一区二区三区四区| 欧美xxx久久| 午夜免费久久看| 一本久久a久久免费精品不卡| 国产日韩欧美高清在线| 久久99国产精品久久| 欧美久久久久久蜜桃| 一区二区三区在线观看欧美 | 欧美视频日韩视频| 一区在线观看视频| aaa亚洲精品| 国产精品国产三级国产三级人妇| 国产成人免费网站| 久久久91精品国产一区二区精品| 国产精品综合一区二区| 精品成人一区二区三区四区| 国产综合成人久久大片91| 精品乱人伦一区二区三区| 精品一区二区三区日韩| 精品国产一区二区亚洲人成毛片| 久久91精品国产91久久小草| 日韩精品综合一本久道在线视频| 男人的天堂亚洲一区|