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

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

?? parse.y

?? 一個C語言的編譯器
?? Y
?? 第 1 頁 / 共 2 頁
字號:
%{
/****************************************************************************
parse.y
ParserWizard generated YACC file.
BY:計算機科學與技術系 0610386 蒲凌君
Date: 2008年12月22日 星期一
****************************************************************************/
#define YYPARSER 

#include "globals.h"
#include "util.h"
#include "scan.h"
#include "parse.h"


static char * savedFunName;            //保存函數(shù)名
static char * savedIdName;             //保存變量名
static int savedLineNo;                //保存行號
static TreeNode * savedTree;           //保存語法樹的根結點
%}

/////////////////////////////////////////////////////////////////////////////
// declarations section
%token ENDFILE ERROR        
%token INT CHAR DOUBLE VOID                           //類型(PS:匯編程序可以完成INT CHAR的翻譯,DOUBLE可以識別,翻譯還不太會)
%token IF ELSE WHILE ASSIGN RETURN FOR INPUT OUTPUT   //語句(IF ELSE;WHILE;FOR;賦值;輸入;輸出;函數(shù)返回;)
%token ID NUM FNUM SCHAR                              //定義變量
%token SEMI COMMA LP RP LSP RSP LFP RFP               //定義一些輔助符號(; , ( ) [ ] { })
%token PLUS SUB MUT DIV MOD INC DEC B_AND B_OR B_NOT B_XOR B_LEFT B_RIGHT        //算術運算(+,-,*,/,%,++,--,&,|,^,~,<<,>>)  
%token EQ GT LT GE LE NEQ                                                        //關系運算(==,>,<,>=,<=,!=)
%token AND OR NOT                                                                //邏輯運算(&&,||,!)
	
%union { TreeNode * ptree;                            //定義樹結點
         Type type;                                   //定義類型
       }
       
%type <ptree> program dec_list dec var_dec fun_dec fun_def params param_list param comp_stmt local_dec stmt_list stmt 
              exp_stmt sele_stmt iter_stmt return_stmt exp var simple_exp factor call args arg_list
              id_list input_stmt output_stmt
%type <type> type_spec
%left	COMMA                                         //按照優(yōu)先級的關系進行先后定義(優(yōu)先級從上到下依次增加)
%right	ASSIGN
%left   OR    
%left   AND
%left   B_AND B_XOR B_OR 
%left   EQ NEQ
%left   LT LE GT GE
%left   B_LEFT B_RIGHT
%left   PLUS SUB
%left   MOD
%left   MUT DIV
%left   NOT B_NOT 
%left   INC DEC
%left   LP RP LSP RSP LFP RFP
%right ELSE

%include {
    void yyerror(const char * message);               
	TreeNode * parse(void);
}

%%

/////////////////////////////////////////////////////////////////////////////
// rules section

program     : dec_list                              //程序由聲明表組成
                 { savedTree = $1;} 
            ;
dec_list    : dec_list dec	                        //用兄弟結點表示不同的聲明語句
				{ TreeNode * t = $1;
				  if (t != NULL)
				  { while (t->sibling != NULL)
					t = t->sibling;
					t->sibling = $2;
					$$ = $1; }
				  else $$ = $2;
				}	                 
            | dec  
                { $$ = $1; }
            ;
dec         : var_dec	{ $$ = $1; }                //聲明由三種的情況(變量定義;函數(shù)聲明;函數(shù)定義)組成
            | fun_dec	{ $$ = $1; }
            | fun_def   { $$ = $1; }
            ;
id          : ID { savedIdName = copyString(tokenString); }
            ;
fid         : { savedFunName = savedIdName; }       //保存函數(shù)名
            ;
var_dec     : type_spec id_list SEMI                //變量定義	
				{ if($1 == Void)
					  ;
					  // err
				  else
				    {	
					  $$ = newDecNode(VarK); 
					  $$ -> type = $1;
					  $$ -> child[0] = $2;
					}
				} 
            ;
id_list     : id_list COMMA var                     //用兄弟結點表示不同的變量名
                { 
                  TreeNode * t = $1;
				  if (t != NULL)
				  { while (t->sibling != NULL)
					t = t->sibling;
					t->sibling = $3;
					$$ = $1; }
				  else $$ = $3;
                }	//	i,str[5],j
            | var { $$ = $1; }
            | id_list COMMA id ASSIGN simple_exp    //在聲明時還可以對其進行賦值
              { 
				  TreeNode * new_node = newStmtNode(AssignK);
				  TreeNode * t = $1;
				  if (t != NULL)
				  { while (t->sibling != NULL)
					t = t->sibling;
					t->sibling = new_node;
					$$ = $1; }
				  else $$ = new_node;
              }
            | id ASSIGN simple_exp
              { 
				 $$ = newStmtNode(AssignK);
				 $$ -> child[0] = newExpNode(IdK);
				 $$ -> child[0] -> attr.name = savedIdName;
				 $$ -> child[1] = $3;
              }
            ; 
type_spec   : INT { $$ = Integer; }                  //類型定義(int;char;double;void)  
            | DOUBLE { $$ = Double; }         
            | CHAR { $$ = Char; }         
            | VOID { $$ = Void; }         
            ;
fun_def     : type_spec id fid LP params RP comp_stmt  //函數(shù)定義 
				{ $$ = newDecNode(FunDefK);
				  $$ -> attr.name = savedFunName;
				  $$ -> type = $1;
				  $$ -> child[0] = $5;
				  $$ -> child[1] = $7; 
				}
            | id fid LP params RP comp_stmt
				{ $$ = newDecNode(FunDefK);
				  $$ -> attr.name = savedFunName;
				  $$ -> type = Void;
				  $$ -> child[0] = $4;
				  $$ -> child[1] = $6; 
				}
            ;
fun_dec     : type_spec id fid LP params RP SEMI
				{ $$ = newDecNode(FunDecK);
				  $$ -> attr.name = savedFunName;
				  $$ -> type = $1;
				  $$ -> child[0] = $5;
				  $$ -> child[1] = NULL;
				}
			| id fid LP params RP SEMI
				{ $$ = newDecNode(FunDecK);
				  $$ -> attr.name = savedFunName;
				  $$ -> type = Void;
				  $$ -> child[0] = $4;
				  $$ -> child[1] = NULL;
				}
            ;             
params      : param_list                              //函數(shù)的參數(shù)列表
                { $$ = $1; }
            | 
				{ $$ = NULL; }
            ;         
param_list  : param_list COMMA param
            	{ TreeNode * t = $1;
				  if (t != NULL)
				  { while (t->sibling != NULL)
					t = t->sibling;
					t->sibling = $3;
					$$ = $1; }
				  else $$ = $3;
				}	                 
            | param
                { $$ = $1; }
            ;
param       : type_spec                                
                { $$ = newDecNode(ParamK);
                  $$ -> type = $1;
                }            
			| type_spec id
                { $$ = newDecNode(ParamK);
                  $$ -> type = $1;
                  $$ -> attr.name = savedIdName;
                }            
            ;
comp_stmt   : LFP local_dec stmt_list RFP             //復合語句定義
                { $$ = newDecNode(CompK);
                  $$ -> child[0] = $2;
                  $$ -> child[1] = $3;
                }            
            ;
local_dec   : local_dec var_dec                       //臨時變量的定義       
            	{ TreeNode * t = $1;
				  if (t != NULL)
				  { while (t->sibling != NULL)
					t = t->sibling;
					t->sibling = $2;
					$$ = $1; }
				  else $$ = $2;
				}	                 
            | 
                { $$ = NULL; }
            ;
stmt_list   : stmt_list stmt                          //語句表          
            	{ TreeNode * t = $1;
				  if (t != NULL)
				  { while (t->sibling != NULL)
					t = t->sibling;
					t->sibling = $2;
					$$ = $1; }
				  else $$ = $2;
				}	                 
            | 
                { $$ = NULL; }
            ;
stmt        : exp_stmt	{ $$ = $1; }                  //語句的類型(條件語句,循環(huán)語句,輸入輸出語句等)          
            | sele_stmt	{ $$ = $1; }
            | iter_stmt	{ $$ = $1; }
            | return_stmt	{ $$ = $1; }
            | comp_stmt  { $$ = $1; }
            | input_stmt { $$ = $1; }
            | output_stmt{ $$ = $1; }
            ;
exp_stmt    : exp SEMI
                { $$ = $1; }
            | SEMI
                { $$ = NULL; }            
            ;
sele_stmt   : IF LP exp RP stmt %prec ELSE            //IF語句的兩種形式
                { $$ = newStmtNode(IfK);
                  $$ -> child[0] = $3;
                  $$ -> child[1] = $5;
                }            
            | IF LP exp RP stmt ELSE stmt
                { $$ = newStmtNode(IfK);
                  $$ -> child[0] = $3;
                  $$ -> child[1] = $5;
				  $$ -> child[2] = $7;
                }
            ;
iter_stmt   : WHILE LP exp RP stmt                    //循環(huán)語句(WHILE,FOR)
				{ $$ = newStmtNode(WhileK);
                  $$ -> child[0] = $3;
                  $$ -> child[1] = $5;
                }
            | FOR LP exp_stmt exp_stmt exp RP stmt
                {
                  $$ = newStmtNode(ForK);
                  $$ -> child[0] = $3;
                  $$ -> child[1]  = $4;
                  $$ -> child[2]  = $7;
                  $$ -> child[3]  = $5;
                }            
            ;  
input_stmt  : INPUT LP id RP SEMI                     //輸入語句

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
福利91精品一区二区三区| 久久久不卡网国产精品二区| 青青草国产精品97视觉盛宴| 国产夜色精品一区二区av| 色婷婷久久99综合精品jk白丝| 亚洲成人黄色小说| 欧美激情综合五月色丁香 | 成人av在线网站| 日韩有码一区二区三区| 国产精品国产精品国产专区不蜜| 91精品国产综合久久久久久久| 成人av免费网站| 久久精品国产久精国产| 亚洲国产精品欧美一二99| 中文字幕乱码亚洲精品一区| 欧美一区二区视频网站| 91福利精品视频| 国产suv精品一区二区883| 美女免费视频一区| 亚洲图片自拍偷拍| 国产福利精品导航| 色香蕉成人二区免费| 久久网站最新地址| 成人在线视频一区二区| 精品国产区一区| 久国产精品韩国三级视频| 亚洲成人动漫在线观看| 亚洲视频中文字幕| 国产女人水真多18毛片18精品视频| 91麻豆精品久久久久蜜臀| 在线精品视频免费播放| 99精品视频在线观看| 欧美精品久久久久久久多人混战| 成人avav在线| 成人性生交大片| 国产成人一级电影| 国产在线播放一区二区三区| 日韩电影在线观看一区| 午夜婷婷国产麻豆精品| 亚洲综合av网| 亚洲777理论| 亚洲电影在线播放| 久久精品一区二区三区四区| www.色精品| 亚洲少妇最新在线视频| 中文字幕一区二区三区四区不卡| 日本一区二区三区dvd视频在线| 久久久久久久av麻豆果冻| 2020国产成人综合网| 91精品国产综合久久精品麻豆| 欧美日韩一卡二卡| 91精品久久久久久蜜臀| 欧美一区二区视频在线观看2022| 欧美成人一区二区三区| 26uuu久久天堂性欧美| 久久精品日产第一区二区三区高清版| 精品国产一区二区三区久久久蜜月 | 亚洲三级免费观看| 亚洲免费观看高清在线观看| 亚洲激情欧美激情| 亚洲国产日韩在线一区模特| 午夜视频在线观看一区| 日本欧美一区二区在线观看| 精品一区二区在线看| 国产91露脸合集magnet| 中文字幕亚洲视频| 亚洲一区免费观看| 免费不卡在线视频| 色婷婷综合五月| 日本一区二区三区国色天香 | 成人美女视频在线观看| 免播放器亚洲一区| 福利一区二区在线| 日韩午夜中文字幕| 国产精品高清亚洲| 一区二区三区中文字幕电影 | 91麻豆国产在线观看| 一本色道久久综合亚洲91| 欧美日韩一区二区在线观看| 91精品在线一区二区| 久久精品男人的天堂| 亚洲图片欧美一区| 国内一区二区在线| 色哟哟国产精品| 精品理论电影在线| 自拍偷自拍亚洲精品播放| 亚洲国产美国国产综合一区二区| 极品尤物av久久免费看| 一本到高清视频免费精品| 色综合亚洲欧洲| 国产一区二区在线观看免费| 精品一二三四区| 91麻豆精品一区二区三区| 精品国产免费一区二区三区香蕉| 18欧美亚洲精品| 久久91精品久久久久久秒播| 欧美综合视频在线观看| 欧美国产一区二区| 日韩vs国产vs欧美| 91麻豆6部合集magnet| 精品毛片乱码1区2区3区| 另类成人小视频在线| 菠萝蜜视频在线观看一区| 91精品一区二区三区在线观看| 国产精品久久久一区麻豆最新章节| 视频在线观看91| 91麻豆免费在线观看| 久久亚洲综合av| 一区二区三区小说| 成人午夜精品在线| 欧美大片在线观看一区| 香蕉加勒比综合久久| av成人动漫在线观看| 久久综合色8888| 蜜臀av性久久久久蜜臀aⅴ流畅| 色综合亚洲欧洲| 精品日韩一区二区三区免费视频| 亚洲国产aⅴ天堂久久| 成人福利电影精品一区二区在线观看| 日韩欧美中文字幕制服| 亚洲国产欧美在线人成| jlzzjlzz亚洲女人18| 欧美tk丨vk视频| 日韩精品1区2区3区| 在线免费视频一区二区| 国产精品第四页| 成人免费观看视频| 久久精品视频免费| 国产不卡视频一区| 久久精品视频网| 国产精品一级黄| 欧美精品一区二区不卡| 麻豆成人在线观看| 欧美一区二区网站| 美女脱光内衣内裤视频久久网站 | 欧美高清视频在线高清观看mv色露露十八 | 人人精品人人爱| 在线综合亚洲欧美在线视频| 日日摸夜夜添夜夜添亚洲女人| 欧美羞羞免费网站| 亚洲成人福利片| 欧美精品aⅴ在线视频| 日韩中文字幕av电影| 欧美三级中文字幕在线观看| 成人午夜av在线| 国产目拍亚洲精品99久久精品| 精品一区二区日韩| 久久久国产一区二区三区四区小说| 国产中文一区二区三区| 久久综合九色综合97婷婷| 国产一二精品视频| 国产精品三级在线观看| 99久久精品免费精品国产| 亚洲欧美日韩精品久久久久| 日本韩国一区二区三区视频| 亚洲高清久久久| 日韩一区二区在线观看| 国产美女一区二区三区| 国产精品国产馆在线真实露脸| 在线观看国产91| 免费在线看成人av| 蜜桃久久精品一区二区| 久久99蜜桃精品| 国产精品美女一区二区三区| 成人av中文字幕| 亚洲高清三级视频| 欧美xxxxxxxx| 本田岬高潮一区二区三区| 亚洲综合久久久| 中文字幕中文字幕一区二区| 亚洲一区二区三区四区五区黄| 免费观看在线色综合| 国产一区二区三区四区五区美女| 国产精品欧美经典| 欧美日韩精品二区第二页| 国产在线麻豆精品观看| 中文字幕日韩一区| 在线电影欧美成精品| 国产不卡在线播放| 九九视频精品免费| 日韩欧美专区在线| 色综合久久中文综合久久牛| 日韩中文字幕区一区有砖一区 | 亚洲视频一区二区免费在线观看| 欧美久久免费观看| 成人禁用看黄a在线| 五月婷婷综合网| 中文字幕第一页久久| 欧美日韩国产影片| 成人涩涩免费视频| 日本少妇一区二区| 亚洲欧美日韩国产一区二区三区| 51久久夜色精品国产麻豆| 99国产精品一区| 久久精品国产澳门| 亚洲国产精品一区二区久久| 国产日韩一级二级三级| 欧美日韩一区成人| 色伊人久久综合中文字幕| 亚洲欧洲成人av每日更新|