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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? decl.c

?? C編譯器源碼是我到處找來的,看了之后很有收獲
?? C
?? 第 1 頁 / 共 3 頁
字號:
 * 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
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕一区二区在线播放| 欧美日韩国产中文| 91成人网在线| 在线综合视频播放| 久久久久久久久久久久久久久99 | 午夜电影一区二区| 久久不见久久见中文字幕免费| 国产成人综合在线| 日本高清视频一区二区| 欧美一区二区三区影视| 国产精品免费网站在线观看| 亚洲一区二区三区视频在线播放| 美国毛片一区二区三区| 99天天综合性| 欧美一个色资源| 亚洲欧美日韩国产综合在线| 免费在线欧美视频| 91麻豆高清视频| 日韩欧美一级二级三级| 亚洲人成网站在线| 理论片日本一区| 欧美主播一区二区三区美女| 久久久亚洲高清| 亚洲sss视频在线视频| 国产精品一区久久久久| 欧美私模裸体表演在线观看| 久久久欧美精品sm网站| 肉丝袜脚交视频一区二区| 成人午夜精品一区二区三区| 欧美日本一区二区在线观看| 国产偷v国产偷v亚洲高清| 亚洲综合成人在线| 高清不卡在线观看av| 日韩视频一区在线观看| 一区二区三区蜜桃| 大胆欧美人体老妇| 精品理论电影在线观看| 亚洲成精国产精品女| 成人app网站| 26uuu精品一区二区三区四区在线| 亚洲午夜激情av| 91丨porny丨户外露出| 久久久另类综合| 美女视频黄 久久| 欧美日韩美女一区二区| 亚洲免费成人av| 成人污视频在线观看| 欧美刺激午夜性久久久久久久| 亚洲一区二区三区美女| av电影在线不卡| 国产欧美日韩综合| 国产乱码精品一区二区三区五月婷| 91精品欧美一区二区三区综合在 | 欧洲av一区二区嗯嗯嗯啊| 国产精品高潮久久久久无| 国产99一区视频免费| 欧美成人一区二区三区片免费| 天堂va蜜桃一区二区三区漫画版| 色婷婷狠狠综合| 亚洲柠檬福利资源导航| 99精品热视频| 亚洲欧美aⅴ...| 99精品视频在线播放观看| 国产精品久久久久婷婷二区次| 国产91精品在线观看| 国产亚洲综合在线| 国产精品一级在线| 久久久国产精华| 国产91精品入口| 日本不卡视频在线观看| 国产成人午夜99999| 精品毛片乱码1区2区3区| 久久精品国内一区二区三区| 日韩片之四级片| 色域天天综合网| 亚洲欧美日韩成人高清在线一区| 成人午夜激情影院| 国产精品久久久久四虎| 91女厕偷拍女厕偷拍高清| 亚洲日本在线观看| 91官网在线免费观看| 一区二区三区国产精华| 欧美日韩国产123区| 秋霞av亚洲一区二区三| 日韩精品一区二区三区中文精品| 激情图片小说一区| 国产色91在线| 成人国产免费视频| 亚洲伦在线观看| 欧美日韩你懂得| 蜜桃视频在线观看一区二区| 精品久久久久久久久久久久久久久久久 | 国产欧美一区二区三区在线老狼| 国产91在线观看丝袜| 成人欧美一区二区三区在线播放| 91一区二区在线| 无码av免费一区二区三区试看| 日韩写真欧美这视频| 国产成人亚洲综合色影视| ㊣最新国产の精品bt伙计久久| 欧美午夜在线一二页| 麻豆国产精品777777在线| 欧美激情综合五月色丁香 | 一区二区三区在线高清| 欧美精品久久久久久久多人混战| 久久99精品国产.久久久久久| 国产日韩成人精品| 欧美在线免费视屏| 狠狠狠色丁香婷婷综合激情 | 91女人视频在线观看| 天堂一区二区在线免费观看| 亚洲精品一区二区三区香蕉| 国产91丝袜在线播放0| 一区二区三区免费看视频| 欧美一级二级在线观看| 99久久久精品| 蜜桃av一区二区在线观看 | 一本一道综合狠狠老| 日韩av中文字幕一区二区| 国产精品色眯眯| 欧美日本一区二区| 国产91精品一区二区麻豆亚洲| 亚洲一区二区精品久久av| 久久久www成人免费毛片麻豆| 欧美亚洲动漫精品| 国产成人在线视频网站| 丝袜亚洲另类丝袜在线| 国产精品免费丝袜| 日韩一区二区视频| 在线亚洲一区观看| 国产精品一级片在线观看| 视频在线观看91| 亚洲品质自拍视频| 久久综合久久综合久久| 精品1区2区3区| www.欧美精品一二区| 精品一区二区三区免费| 亚洲一本大道在线| 亚洲欧洲无码一区二区三区| 欧美不卡一区二区三区四区| 精品视频一区二区不卡| 99精品黄色片免费大全| 国模无码大尺度一区二区三区| 亚洲777理论| 一区二区三区四区国产精品| 国产午夜精品一区二区三区四区| 欧美一区二区三区四区五区 | 亚洲午夜精品久久久久久久久| 国产欧美一区二区精品性色| 欧美一级一区二区| 欧美在线不卡视频| 99热国产精品| 国产精品亚洲视频| 韩国视频一区二区| 蜜桃av噜噜一区| 五月天丁香久久| 亚洲不卡在线观看| 亚洲一区av在线| 亚洲综合一区二区三区| 最新高清无码专区| 国产精品免费视频网站| 国产三级精品视频| 亚洲精品一区二区三区在线观看 | 极品瑜伽女神91| 蜜臀av一区二区三区| 天堂精品中文字幕在线| 亚洲国产精品久久一线不卡| 伊人一区二区三区| 亚洲伦理在线免费看| 亚洲欧美偷拍卡通变态| 国产精品理伦片| 中文字幕永久在线不卡| 国产精品美日韩| 欧美国产日韩一二三区| 欧美国产一区二区| 国产精品福利在线播放| 国产精品久久久久一区二区三区共 | 日韩—二三区免费观看av| 亚洲成人av电影在线| 无码av中文一区二区三区桃花岛| 亚洲国产精品一区二区久久恐怖片 | 国产精品影视网| 国产精品一二三四| 成人午夜在线免费| 成人一区二区三区中文字幕| 成人手机在线视频| 99精品桃花视频在线观看| 色综合咪咪久久| 欧美视频一区二区三区四区 | 日韩成人免费电影| 美女网站一区二区| 国内精品视频一区二区三区八戒| 国产一区二区三区久久悠悠色av| 国产成人丝袜美腿| 99久久99久久免费精品蜜臀| 色欧美日韩亚洲| 337p亚洲精品色噜噜狠狠| 日韩欧美国产高清| 久久久久久一二三区| 国产精品嫩草影院com|