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

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

?? c.y

?? C編譯器,在VC6.0環(huán)境下開發(fā)
?? Y
?? 第 1 頁 / 共 5 頁
字號:
specifier_qualifier_list
		:	type_specifier specifier_qualifier_list
			{
				PARSE_INFO("specifier_qualifier_list :type_specifier specifier_qualifier_list")
			}
		|	type_specifier
			{
				PARSE_INFO("specifier_qualifier_list :type_specifier")
			}
		|	type_qualifier specifier_qualifier_list
			{
				PARSE_INFO("specifier_qualifier_list :type_qualifier specifier_qualifier_list")
			}
		|	type_qualifier
			{
				PARSE_INFO("specifier_qualifier_list :type_qualifier")
			}
		;
*/

declarator
		:
/*
			pointer	direct_declarator
			{
				PARSE_INFO("declarator :pointer	direct_declarator")
			}
		|
*/
			direct_declarator
			{
				PARSE_INFO("declarator :direct_declarator")
			}
		;

direct_declarator
		:	identifier
			{
				PARSE_INFO("direct_declarator :identifier")
				$$ = new_symbol();
				strncpy( $$->name, $1, NAME_LEN );
			}
/*	// pointer need it, we skip pointer, so skip it
		|	oLP declarator oRP
			{
				PARSE_INFO("direct_declarator :oLP declarator oRP")
			}
*/
		|	direct_declarator oLB constant_expression oRB
			{
				PARSE_INFO("direct_declarator :direct_declarator oLB constant_expression oRB")
				// array declaration
				if ( IS_FUNCTION($1) )
				{
					yyerror("function returns array");
					user_exit(1);
				}
				if ( IS_ARRAY($1) )
				{
					yyerror("only support one demision array");
					user_exit(1);
				}
				// check constant_expression
				if ( !IS_CL($3) )
				{
					yyerror("array unknown size");
					user_exit(1);
				}
				if ( !get_sym_value($3) )
				{
					yyerror("cannot allocate an array of constant size 0");
					user_exit(1);
				}
				if (get_sym_value($3) < 0)
				{
					yyerror("negative subscript or subscript is too large");
					user_exit(1);
				}
				// set array flag
				$1->is_array = 1;
				$1->num_ele = get_sym_value($3);
				del_symbol($3);
			}
		|	direct_declarator oLB oRB
			{
				PARSE_INFO("direct_declarator :direct_declarator oLB oRB")
				if ( IS_FUNCTION($1) )
				{
					yyerror("function returns array");
					user_exit(1);
				}
				if ( IS_ARRAY($1) )
				{
					yyerror("only support one demision array");
					user_exit(1);
				}
				// set array flag
				$1->is_array = 1;
				$1->num_ele = 0;
			}
		|	direct_declarator oLP parameter_type_list oRP
			{
				PARSE_INFO("direct_declarator :direct_declarator oLP parameter_type_list oRP")
				if ( IS_FUNCTION($1) )
				{
					yyerror("function returns function");
					user_exit(1);
				}
				if ( IS_ARRAY($1) )
				{
					yyerror("array element type cannot be function");
					user_exit(1);
				}
				// set function flag
				$1->is_function = 1;
				// assign function rname
				if ( IS_MAIN_FUNC($1) )
				{
					// main(..)
					strcpy($1->rname, $1->name);
				}
				else
				{
					sprintf($1->rname, _FUNCTION_NAME, $1->name);
				}
				// check weather func(void)
				if ( $3->NOUN == SPEC_VOID )
				{
					if ( $3->next )
					{
						yyerror("internal error in 'direct_declarator oLP parameter_type_list oRP'");
						user_exit(1);
					}
					//so, ...
					$1->args = NULL;
					del_symbol($3);
				}
				else
				{
					$1->args = $3;
					// assign parameters rname
					assign_parameters_rname($3);
				}
			}
/*		|	direct_declarator oLP identifier_list oRP
			{
				PARSE_INFO("direct_declarator :direct_declarator oLP identifier_list oRP")
				// old style function declaration, not support
			}
*/
		|	direct_declarator oLP oRP
			{
				PARSE_INFO("direct_declarator :direct_declarator oLP oRP")
				if ( IS_FUNCTION($1) )
				{
					yyerror("function returns function");
					user_exit(1);
				}
				if ( IS_ARRAY($1) )
				{
					yyerror("array element type cannot be function");
					user_exit(1);
				}
				// set function flag
				$1->is_function = 1;
				// assign function rname
				if ( IS_MAIN_FUNC($1) )
				{
					// main(..)
					strcpy($1->rname, $1->name);
				}
				else
				{
					sprintf($1->rname, _FUNCTION_NAME, $1->name);
				}
				// no parameters , so ->args is NULL as default
			}
		;

/*
pointer
		:	oMUL type_qualifier_list
			{
				PARSE_INFO("pointer :oMUL type_qualifier_list")
			}
		|	oMUL
			{
				PARSE_INFO("pointer :oMUL")
			}
		|	oMUL type_qualifier_list pointer
			{
				PARSE_INFO("pointer :oMUL type_qualifier_list pointer")
			}
		|	oMUL pointer
			{
				PARSE_INFO("pointer :oMUL pointer")
			}
		;

type_qualifier_list
		:	type_qualifier
			{
				PARSE_INFO("type_qualifier_list :type_qualifier")
			}
		|	type_qualifier_list type_qualifier
			{
				PARSE_INFO("type_qualifier_list :type_qualifier_list type_qualifier")
			}
		;
*/

parameter_type_list
		:	parameter_list
			{
				PARSE_INFO("parameter_type_list :parameter_list")
			}
		|	parameter_list oCOMMA oDOTDOTDOT
			{
				PARSE_INFO("parameter_type_list :parameter_list oCOMMA oDOTDOTDOT")
				yyerror("more arguments not support now");
				user_exit(1);
			}
		;

parameter_list
		:	parameter_declaration
			{
				PARSE_INFO("parameter_list :parameter_declaration")
			}
		|	parameter_list oCOMMA parameter_declaration
			{
				PARSE_INFO("parameter_list :parameter_list oCOMMA parameter_declaration")
				// if in this state, parameter is void, it must be 
				// in declaration_specifiers
				// so it must has (..., void,..) or (void, ...)
				// error
				if ($3->NOUN == SPEC_VOID || $1->NOUN == SPEC_VOID)
				{
					yyerror("'void' cannot be an argument type, except for '(void)'");
					user_exit(1);
				}
				link_symbol_list($1, $3);
			}
		;

parameter_declaration
		:	declaration_specifiers declarator
			{
				PARSE_INFO("parameter_declaration :declaration_specifiers declarator")
				unoin_specifier_to_declarator($1, $2);
				del_symbol( $1 );
				// set argument flag
				$2->is_argument = 1;
				if ( !IS_VAR($2) )
				{
					yyerror("function has bad storage class");
					user_exit(1);
				}
				check_var_declarator($2);
				$$ = $2;
			}
		|	declaration_specifiers abstract_declarator
			{
				PARSE_INFO("parameter_declaration :declaration_specifiers abstract_declarator")
				unoin_specifier_to_declarator($1, $2);
				del_symbol( $1 );
				// set argument flag
				$2->is_argument = 1;
				if ( !IS_VAR($2) )
				{
					yyerror("function has bad storage class");
					user_exit(1);
				}
				check_var_declarator($2);
				$$ = $2;
			}
		|	declaration_specifiers
			{
				PARSE_INFO("parameter_declaration :declaration_specifiers")
				// it means in declaration is not use, and 
				// in definition is can not use the parameter
				// so assign the args a unmeeted name, such as number, xixi....
				// just use specifier symbol as var
				
				// set argument flag
				$1->is_argument = 1;
				if ( !IS_VAR($1) )
				{
					yyerror("function has bad storage class");
					user_exit(1);
				}
				// assign symbol a unused name
				assign_symbol_unusedname($1);
			}
		;

/*	// used by old style function declaration
identifier_list
		:	identifier
			{
				PARSE_INFO("identifier_list	:identifier")
			}
		|	identifier_list oCOMMA identifier
			{
				PARSE_INFO("identifier_list	:identifier_list oCOMMA identifier")
			}
		;
*/

initializer
		:	assignment_expression
			{
				PARSE_INFO("initializer :assignment_expression")
			}
		|	oLC initializer_list oRC
			{
				PARSE_INFO("initializer :oLC initializer_list oRC")
				yyerror("initialize = {....} not support");
				user_exit(1);
			}
		|	oLC initializer_list oCOMMA oRC
			{
				PARSE_INFO("initializer :oLC initializer_list oCOMMA oRC")
				yyerror("initialize = {...., } not support");
				user_exit(1);
			}
		;

initializer_list
		:	initializer
			{
				PARSE_INFO("initializer_list :initializer")
			}
		|	initializer_list oCOMMA initializer
			{
				PARSE_INFO("initializer_list :initializer_list oCOMMA initializer")
			}
		;

/*	// 類型轉(zhuǎn)換, skip
type_name
		:	specifier_qualifier_list abstract_declarator
			{
				PARSE_INFO("type_name :specifier_qualifier_list abstract_declarator")
			}
		|	specifier_qualifier_list
			{
				PARSE_INFO("type_name :specifier_qualifier_list")
			}
		;
*/

abstract_declarator
		:
/*
			pointer
			{
				PARSE_INFO("abstract_declarator :pointer")
			}
		|	pointer direct_abstract_declarator
			{
				PARSE_INFO("abstract_declarator :pointer direct_abstract_declarator")
			}
		|
*/
			direct_abstract_declarator
			{
				PARSE_INFO("abstract_declarator :direct_abstract_declarator")
			}
		;

direct_abstract_declarator
		:	
/*	// pointer need it, we skip pointer. so we skip it
			oLP abstract_declarator oRP
			{
				PARSE_INFO("direct_abstract_declarator :oLP abstract_declarator oRP")
			}
		|	
*/
/*	// we only support one demission array, so skip it
			direct_abstract_declarator oLB constant_expression oRB
			{
				PARSE_INFO("direct_abstract_declarator :direct_abstract_declarator oLB constant_expression oRB")
			}
		|	
*/
			oLB constant_expression oRB
			{
				PARSE_INFO("direct_abstract_declarator :oLB constant_expression oRB")
				// array declaration
				// check constant_expression
				if ( !IS_CL($2) )
				{
					yyerror("array unknown size");
					user_exit(1);
				}
				if ( !get_sym_value($2) )
				{
					yyerror("cannot allocate an array of constant size 0");
					user_exit(1);
				}
				if (get_sym_value($2) < 0)
				{
					yyerror("negative subscript or subscript is too large");
					user_exit(1);
				}
				$$ = new_symbol();
				// assign symbol a unused name
				assign_symbol_unusedname($$);
				// set array flag
				$$->is_array = 1;
				$$->num_ele = get_sym_value($2);
				del_symbol($2);
			}
/*	// function pointer, so skip
		|	direct_abstract_declarator oLP parameter_type_list oRP
			{
				PARSE_INFO("direct_abstract_declarator :direct_abstract_declarator oLP parameter_type_list oRP")
			}
		|	oLP parameter_type_list oRP
			{
				PARSE_INFO("direct_abstract_declarator :oLP parameter_type_list oRP")
			}
*/
		;

identifier
		:	yNAME
			{
				PARSE_INFO("identifier :yNAME")
				PARSE_INFO("======= FOLLOW BY =======")
				PARSE_INFO($1)
			}
		;

statement
		:	labeled_statement
			{
				PARSE_INFO("statement :labeled_statement")
			}
		|	expression_statement
			{
				PARSE_INFO("statement :expression_statement")
			}
		|	compound_statement
			{
				PARSE_INFO("statement :compound_statement")
			}
		|	selection_statement
			{
				PARSE_INFO("statement :selection_statement")
			}
		|	iteration_statement
			{
				PARSE_INFO("statement :iteration_statement")
			}
		|	jump_statement
			{
				PARSE_INFO("statement :jump_statement")
			}
		;

labeled_statement
		:	identifier oCOLON 
			{
				symbol	*lb;

				PARSE_INFO("labeled_statement :identifier oCOLON ")
				lb = search_goto_label($1);
				if ( !lb )
				{
					// the label has not be reference
					// so, new symbol and add it to goto label symtab
					lb = new_symbol();
					lb->NOUN = SPEC_LABEL;
					strcpy(lb->name, $1);
					strcpy(lb->rname, get_a_label());
					add_goto_label(lb);
				}
				else if ( !IS_LAB_DECL(lb) )
				{
					// the label has been used
					parse_error($1, " : redefine label");
					user_exit(1);
				}
				else
				{
					// the label only be reference
					// so, change the decl flag
					lb->is_declaration = 0;
				}
				// label:
				gen_label(lb->rname);
			}
			statement
			{
				PARSE_INFO("statement")
			}
		|	kCASE constant_expression oCOLON 
			{
				symbol	*cs;

				PARSE_INFO("labeled_statement :kCASE constant_expression oCOLON ")
				if ( !IS_CL($2) )
				{
					yyerror("case expression not constant");
					user_exit(1);
				}
				cs = new_symbol();

				strcpy(cs->name, _CASE_NAME);
				// get a label
				strcpy(cs->rname, get_a_label());
				cs->V_I = get_sym_value($2);
				add_case_to_switch(cs);
				// label:
				gen_label(cs->rname);
			}
			statement
			{
				PARSE_INFO("statement")
			}
		|	kDEFAULT oCOLON 
			{
				symbol	*cs;

				PARSE_INFO("labeled_statement :kDEFAULT oCOLON ")
				cs = new_symbol();

				strcpy(cs->name, _DEFAULT_NAME);
				// get a label
				strcpy(cs->rname, get_a_label());
				add_case_to_switch(cs);
				// label:
				gen_label(cs->rname);
			}
			statement
			{
				PARSE_INFO("statement")
			}
		;

expression_statement
		:	expression oSEMI
			{
				PARSE_INFO("expression_statement :expression oSEMI")

				GEN_END_EXPRESS($1)
				
				if ($1)
					del_symbol($1);
			}
					
compound_statement
		:	oLC declaration_list 
			{
				PARSE_INFO("compound_statement :oLC declaration_list ");

				if ( sg_parameter_list )
				// means this compound statement belong to a function, so...
				// of course, if sg_parameter_list is NULL it also maybe a
				// compound statement belong to a function because the parameters
				// is void , heihei....
				{
					add_symbol_list_to_current_symtab(sg_parameter_list);
					sg_parameter_list = NULL;
				}
					
				gen_var_assign_init($2);
			}
			statement_list oRC
			{
				PARSE_INFO("statement_list oRC");
				del_compound_symtab();
			}
		|	oLC 
			{
				PARSE_INFO("compound_statement :oLC ")

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费观看成人av| 欧美亚洲日本一区| 国产精品1区2区3区在线观看| 日日夜夜精品视频免费| 午夜影院在线观看欧美| 性做久久久久久久久| 香蕉久久一区二区不卡无毒影院| 午夜成人免费视频| 秋霞电影网一区二区| 免费欧美在线视频| 国产一区二区三区| 国产a精品视频| 一本一本久久a久久精品综合麻豆| av电影天堂一区二区在线| 99热精品一区二区| 91黄色免费版| 欧美人狂配大交3d怪物一区| 91精品国产色综合久久| 欧美成人伊人久久综合网| 久久精品人人做人人综合| 欧美激情在线免费观看| 亚洲精品亚洲人成人网| 夜夜亚洲天天久久| 天天操天天干天天综合网| 奇米影视一区二区三区| 国产一区二区免费在线| 99视频精品在线| 欧美伦理视频网站| 精品88久久久久88久久久| 久久久亚洲精品石原莉奈| 国产精品色在线观看| 一区av在线播放| 蜜桃av一区二区| 国产经典欧美精品| 欧美性生活一区| 日韩欧美在线网站| 国产精品国产成人国产三级 | 亚洲人成小说网站色在线| 一区精品在线播放| 亚洲一区二区三区免费视频| 秋霞成人午夜伦在线观看| 国产成人精品三级麻豆| 欧美亚洲综合在线| 精品久久久久久久一区二区蜜臀| 国产精品美女www爽爽爽| 亚洲制服丝袜在线| 国产高清一区日本| 欧美日韩精品综合在线| 国产视频一区在线观看| 亚洲一区二区视频在线| 国内精品视频666| 在线精品亚洲一区二区不卡| 日韩欧美国产高清| 亚洲婷婷国产精品电影人久久| 午夜精品久久久久影视| 成人午夜大片免费观看| 欧美日韩国产精选| 日本一区二区三区国色天香| 五月天一区二区| 丰满放荡岳乱妇91ww| 91精品国产综合久久久蜜臀图片 | 午夜激情一区二区| 不卡的av在线播放| 日韩精品一区在线| 一区二区三区在线不卡| 国产精华液一区二区三区| 欧美人与z0zoxxxx视频| 中文字幕日韩av资源站| 精品一区二区三区在线播放视频| 91欧美一区二区| 国产午夜精品久久| 久草在线在线精品观看| 欧美日韩精品欧美日韩精品一 | 丰满白嫩尤物一区二区| 日韩视频中午一区| 亚洲va欧美va人人爽午夜| 成人黄色a**站在线观看| 精品久久人人做人人爰| 午夜私人影院久久久久| 91视视频在线直接观看在线看网页在线看 | 精久久久久久久久久久| 欧美精品99久久久**| 亚洲三级电影全部在线观看高清| 国精产品一区一区三区mba桃花 | 国产精品视频第一区| 蜜桃一区二区三区四区| 欧美视频一区二区三区| 国产精品国产馆在线真实露脸| 国产在线精品不卡| 精品欧美一区二区三区精品久久| 亚洲一二三区在线观看| 99久免费精品视频在线观看| 久久久777精品电影网影网| 麻豆精品久久久| 91精品国产欧美日韩| 三级成人在线视频| 欧美精品色综合| 婷婷开心久久网| 欧美三级电影在线看| 一区二区三区四区不卡在线 | 欧美电视剧免费观看| 五月综合激情网| 欧美日韩一区二区三区在线| 一区二区在线观看免费| 91同城在线观看| 亚洲精品网站在线观看| 在线视频一区二区免费| 亚洲精品成人精品456| 91精品福利在线| 一区二区三区在线免费观看| 在线亚洲人成电影网站色www| 亚洲免费三区一区二区| 欧美亚洲国产一区二区三区va | 久久99精品国产麻豆婷婷| 欧美mv日韩mv国产网站app| 国产一区二区免费在线| 国产日韩精品一区二区三区 | 国产99久久精品| 中文字幕不卡在线| 91免费观看在线| 亚洲制服欧美中文字幕中文字幕| 欧美日韩国产综合草草| 日韩av不卡一区二区| 欧美成人高清电影在线| 国产一区二区三区不卡在线观看| 国产喷白浆一区二区三区| av动漫一区二区| 亚洲成a人在线观看| 日韩色视频在线观看| 国产乱一区二区| 中文字幕日本不卡| 欧美日韩精品一区视频| 精品一区二区免费看| 亚洲国产精品激情在线观看 | 中文字幕av一区二区三区| 色婷婷综合久色| 五月婷婷另类国产| 久久久久久久网| 日本高清无吗v一区| 蜜臀av一区二区| 亚洲国产精品黑人久久久| 91成人国产精品| 久久 天天综合| 亚洲色大成网站www久久九九| 欧美日韩综合在线| 国产一区二区三区电影在线观看| 亚洲色图一区二区三区| 日韩一区二区精品在线观看| 成人美女视频在线看| 午夜精品成人在线视频| 久久婷婷国产综合国色天香| 色综合视频一区二区三区高清| 五月天亚洲婷婷| 国产精品免费av| 欧美精品久久99| 粉嫩欧美一区二区三区高清影视| 亚洲一区自拍偷拍| 久久免费国产精品| 欧美色区777第一页| 国产精品影视在线| 一个色综合av| 国产精品少妇自拍| 日韩三级在线免费观看| 99精品视频一区二区| 麻豆精品久久精品色综合| 日韩一区中文字幕| 精品国产乱码久久久久久免费| 色老汉av一区二区三区| 国产呦萝稀缺另类资源| 亚洲午夜av在线| 国产精品毛片大码女人| 精品国产一区二区三区忘忧草| 91丨porny丨国产| 国产成人在线视频网站| 日本不卡1234视频| 亚洲激情一二三区| 国产精品污网站| 精品国产乱码久久久久久影片| 91国偷自产一区二区开放时间 | 欧美日韩一区二区在线观看 | 欧美一区二区三区在线观看 | 欧美一级高清大全免费观看| 欧美伊人精品成人久久综合97| 国产白丝精品91爽爽久久| 久久99精品久久久| 石原莉奈在线亚洲三区| 亚洲综合自拍偷拍| 一区二区三区在线免费播放| 亚洲欧美自拍偷拍色图| 国产亚洲成av人在线观看导航| 日韩三区在线观看| 欧美一区二区三区男人的天堂| 欧美亚洲丝袜传媒另类| 色狠狠一区二区三区香蕉| 99国产精品久| www.欧美精品一二区| 国产大陆精品国产| 成人一区二区三区| 国产成人精品亚洲日本在线桃色| 国产一区二区在线电影|