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

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

?? globals.h

?? 學習編譯原理
?? H
?? 第 1 頁 / 共 2 頁
字號:
/************************************************************/
/* 文件	 globals.h											*/
/* 說明  類PASCAL語言編譯器的全局類型和變量,應在其他包含文件之前	*/
/* 主題  編譯器結構:原理和實例								*/	
/************************************************************/

/* 如已經聯入頭文件globals.h則不再聯入 */
#ifndef _GLOBALS_H_
#define _GLOBALS_H_

/****** globals.h所包含頭文件 ******/
#include "stdio.h"
#include "stdlib.h"

/* 定義常量FALSE為0 */
#ifndef FALSE
#define FALSE 0
#endif

/* 定義常量TRUE為1 */
#ifndef TRUE
#define TRUE 1
#endif


/* 定義保留字數量常量MAXRESERVED為21 */
#define MAXRESERVED 21


/* MAXTOKENLEN為單詞最大長度定義為40 */
#define MAXTOKENLEN 40

/*初始化符號表中變量的偏移*/
#define INITOFF 7

/* SCOPESIZE為符號表scope棧的大小*/
#define SCOPESIZE 1000

/*定義token的長度*/
#define TOKENLEN sizeof (TokenType)

/*定義鏈表節點的長度*/
#define CHAINNODELEN sizeof (ChainNodeType) 


/********************** 單詞的詞法類型 ********************/
typedef enum 
{
	/* 簿記單詞符號 */
    ENDFILE,	ERROR,
	/* 保留字 */
    PROGRAM,	PROCEDURE,	TYPE,	VAR,		IF,
	THEN,		ELSE,		FI,		WHILE,		DO,
	ENDWH,		BEGIN,		END,	READ,		WRITE,
	ARRAY,		OF,			RECORD,	RETURN, 

	INTEGER,	CHAR,
	/* 多字符單詞符號 */
    ID,			INTC,		CHARC,
    /*特殊符號 */
	ASSIGN,		EQ,			LT,		PLUS,		MINUS,
	TIMES,		OVER,		LPAREN,	RPAREN,		DOT,
	COLON,		SEMI,		COMMA,	LMIDPAREN,	RMIDPAREN,
	UNDERANGE
} LexType;


/*********** 單詞的類型,包括詞法信息和語義信息 ************/
typedef struct tokenType
    { int     lineshow;
	  LexType Lex;
      char    Sem[MAXTOKENLEN+1];
    } TokenType; 


/***********鏈表的結點類型,包括Token部分和指針部分**********/
typedef struct  node  
    { TokenType   Token;      //單詞
      struct node *nextToken; //指向下一個單詞的指針
    } ChainNodeType;  




/******************************************************
 ******************   語法分析樹   ********************
 ******************************************************/

/*語法樹根節點ProK,程序頭結點PheadK,聲明類型節點DecK,
  標志子結點都是類型聲明的結點TypeK,標志子結點都是變量聲明的結點VarK,
  函數聲明結點FuncDecK,語句序列節點StmLK,語句聲明結點StmtK,
  表達式結點ExpK*/
typedef enum {ProK,PheadK,DecK,TypeK,VarK,ProcDecK,StmLK,StmtK,ExpK}
              NodeKind;


/*聲明類型Deckind 類型的枚舉定義:
  數組類型ArrayK,字符類型CharK,
  整數類型IntegerK,記錄類型RecordK,
  以類型標識符作為類型的IdK*/ 
typedef enum {ArrayK,CharK,IntegerK,RecordK,IdK}  DecKind;



/* 語句類型StmtKind類型的枚舉定義:			*
 * 判斷類型IfK,循環類型WhileK				*
 * 賦值類型AssignK,讀類型ReadK              *
 * 寫類型WriteK,函數調用類型CallK          */
typedef enum {IfK,WhileK,AssignK,ReadK,WriteK,CallK,ReturnK} StmtKind;


/* 表達式類型ExpKind類型的枚舉定義:         *
 * 操作類型OpK,常數類型ConstK,變量類型VarK */
typedef enum {OpK,ConstK,VariK} ExpKind;


/* 變量類型VarKind類型的枚舉定義:           *
 * 標識符IdV,數組成員ArrayMembV,域成員FieldMembV*/
typedef enum {IdV,ArrayMembV,FieldMembV} VarKind; 


/* 類型檢查ExpType類型的枚舉定義:           *
 * 空Void,整數類型Integer,字符類型Char      */ 
typedef enum {Void,Integer,Boolean} ExpType;

/* 參數類型ParamType類型的枚舉定義:        *
 * 值參valparamType,變參varparamType        */
typedef enum {valparamType,varparamType} ParamType; 

/* 定義語法樹節點的最大子節點數MAXCHILDRREN為3 */
/* 過程聲明部分的子節點child[0]指向參數部分,
   子節點child[1]指向聲明體部分,子節點child[2]
   指向函數的語句部分;*/ 
#define MAXCHILDREN 3 

/*提前聲明符號表結構*/
struct symbtable;

/********** 語法樹節點treeNode類型 *********/
typedef struct treeNode

   { 
	 struct treeNode * child[MAXCHILDREN];		/* 子節點指針	*/			
     struct treeNode * sibling;					/* 兄弟節點指針	*/
     int lineno;								/* 源代碼行號	*/
     NodeKind nodekind;						    /* 節點類型		*/
     union 
	 {
		 DecKind  dec;
	     StmtKind stmt; 
		 ExpKind  exp; 
	 } kind;                       /* 具體類型     */

	 int idnum;                    /* 相同類型的變量個數 */ 
	 
	 char name[10][10];            /* 標識符的名稱  */

	 struct symbtable * table[10]; /* 與標志符對應的符號表地址,在語義分析階段填入*/  

	 struct 
	 {
		struct
			{	
				int low;              /* 數組下界     */
				int up;               /* 數組上界     */
				DecKind   childtype;  /* 數組的子類型 */
			}ArrayAttr;               /* 數組屬性     */
	         
		struct
			{	
				ParamType  paramt;     /* 過程的參數類型*/
			}ProcAttr;                 /* 過程屬性      */ 
		
		struct
			{
				LexType op;           /* 表達式的操作符*/						
				int val;		      /* 表達式的值	   */ 
				VarKind  varkind;     /* 變量的類別    */
				ExpType type;         /* 用于類型檢查  */
			}ExpAttr;	              /* 表達式屬性    */

      char type_name[10];             /* 類型名是標識符  */      
             
	 } attr;                          /* 屬性	       */
}TreeNode;

/*非終極符的總數*/
#define  NTMLNUM    68

/*終極符的總數*/
#define  TMLNUM     42

/*LL1分析表的大小*/
#define  TABLESIZE  104

/******************類型和變量聲明*********************/

/* 1.進行LL1語法分析用到的類型及對應的變量  */

/*所有非終極符,其各自含義可參考LL1文法*/
typedef enum
{ 
  Program,	      ProgramHead,	    ProgramName,	DeclarePart,
  TypeDec,        TypeDeclaration,	TypeDecList,	TypeDecMore,
  TypeId,	      TypeName,			BaseType,	    StructureType,
  ArrayType,      Low,	            Top,            RecType,
  FieldDecList,   FieldDecMore,	    IdList,	        IdMore,
  VarDec,	      VarDeclaration,	VarDecList,		VarDecMore,
  VarIdList,	  VarIdMore,		ProcDec,		ProcDeclaration,
  ProcDecMore,    ProcName,		    ParamList,		ParamDecList,
  ParamMore,      Param,		    FormList,		FidMore,
  ProcDecPart,    ProcBody,	    	ProgramBody,	StmList,
  StmMore,        Stm,				AssCall,		AssignmentRest,
  ConditionalStm, StmL,			    LoopStm,		InputStm,
  InVar,          OutputStm,		ReturnStm,		CallStmRest,
  ActParamList,   ActParamMore,		RelExp,			OtherRelE,
  Exp,			  OtherTerm,		Term,           OtherFactor,
  Factor,         Variable,			VariMore,		FieldVar,
  FieldVarMore,   CmpOp,			AddOp,          MultOp
  
}  NontmlType; 

/*所有終極符,取自單詞的詞法類型的枚舉定義,可參考zglobals.h頭文件*/
typedef LexType  TmlType;


/*實現LL1分析用的分析棧,存放的是終極符和非終極符 */
typedef struct Node
{  /*內容標志*/
   int flag;    /* flag為1,表示棧中內容為非終極符;*/
                /* flag為2,表示棧中內容為終極符    */
   /*內容*/
   union { NontmlType Ntmlvar ;  /*非終極符部分*/ 
           TmlType tmlvar;       /*終極符部分*/
         } var;   

   /*指向下一個節點的指針*/
   struct Node *underNode;

}  StackNode;


/* 2.創建語法樹所需的類型及變量**/

/*為建立聲明和語句部分的語法樹所設的指針棧,*
 *注意棧中存的是存放指針的地址              */
typedef struct NodePA
{  TreeNode       **pointer;
   struct NodePA  *underNode;
}  StackNodePA;


/*為生成表達式部分的語法樹所設的指針棧,*
 *棧中存的是存放指向樹節點的指針        */
typedef struct NodeP
{  TreeNode      *pointer;
   struct NodeP  *underNode;
}StackNodeP;

/*符號棧頂指針*/
extern StackNode *StackTop;

/*棧空標志*/
extern  int STACKEMPTY; 

/*語法樹棧頂指針*/
extern  StackNodePA  *StackTopPA;
/*棧空標志*/
extern  int  paSTACKEMPTY;

/*操作符棧的棧頂指針*/
extern  StackNodeP  *OpStackTop;
/*操作符棧空標志*/
extern  int OpSTACKEMPTY ;  

/*操作數棧的棧頂指針*/
extern  StackNodeP  *NumStackTop;

/*操作數棧空標志*/
extern  int NumSTACKEMPTY ;



/******************************************************
 **********語義分析需要用到的類型及變量定義************
 ******************************************************/


/*標識符的類型*/
typedef  enum    {typeKind,varKind,procKind}IdKind;

/*變量的類別。dir表直接變量(值參),indir表示間接變量(變參)*/						
typedef  enum    {dir,indir}AccessKind;

/*形參表的結構定義*/
typedef struct  paramTable
{ 
	struct symbtable   *  entry;/*指向該形參所在符號表中的地址入口*/
	struct paramTable  *  next;
}ParamTable;


struct typeIR;
/*標識符的屬性結構定義*/
typedef struct 
{
	struct typeIR  * idtype;		/*指向標識符的類型內部表示*/
	IdKind    kind;					/*標識符的類型*/
	union   
	{
		struct
		{
			AccessKind   access;   /*判斷是變參還是值參*/
			int          level;    
			int          off;
			bool         isParam;  /*判斷是參數還是普通變量*/

		}VarAttr;/*變量標識符的屬性*/	
		struct
		{
			int         level;     /*該過程的層數*/

			ParamTable  * param;   /*參數表*/

			int         mOff;	   /*過程活動記錄的大小*/
			                
			int         nOff;  	   /*sp到display表的偏移量*/
							
			int         procEntry; /*過程的入口地址*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
不卡视频一二三| 大陆成人av片| 亚洲中国最大av网站| 中文字幕亚洲区| 国产精品成人网| 亚洲色图视频免费播放| 亚洲图片另类小说| 夜色激情一区二区| 亚洲一级电影视频| 日本美女一区二区| 精彩视频一区二区三区| 国产福利一区在线观看| 成人午夜又粗又硬又大| 99riav久久精品riav| 99精品一区二区| 一本色道久久综合亚洲91| 欧美亚洲动漫精品| 6080午夜不卡| 国产校园另类小说区| 国产精品乱码一区二区三区软件| 国产精品区一区二区三区| 1000部国产精品成人观看| 中文字幕一区二区三区四区不卡| 一区二区三区在线看| 热久久国产精品| 国产成人自拍高清视频在线免费播放| 成人美女视频在线观看| 色婷婷久久久久swag精品| 欧美一区二区在线看| 国产午夜精品一区二区三区视频 | 亚洲欧美一区二区久久| 一区二区三区.www| 另类调教123区| 本田岬高潮一区二区三区| 在线免费观看视频一区| 精品国产91亚洲一区二区三区婷婷| 亚洲国产精品传媒在线观看| 五月天丁香久久| 国产精品99久久久久久久vr| 欧美吞精做爰啪啪高潮| 久久久久久夜精品精品免费| 亚洲一区二区三区四区五区中文 | 亚洲欧洲99久久| 首页国产欧美日韩丝袜| www.一区二区| 精品福利视频一区二区三区| 国产精品欧美极品| 伦理电影国产精品| 在线免费av一区| 久久精品视频在线免费观看| 日韩高清在线观看| 91久久奴性调教| 国产亚洲欧洲997久久综合| 亚洲日韩欧美一区二区在线| 日韩欧美在线影院| 亚洲欧洲国产日本综合| 精品一区二区三区免费播放| 色哟哟国产精品免费观看| 欧美精品一区二区高清在线观看| 一区二区高清免费观看影视大全| 国产成a人无v码亚洲福利| 日韩视频免费直播| 一区二区免费看| 99久久伊人精品| 国产精品丝袜在线| 国产传媒欧美日韩成人| 精品免费99久久| 日本怡春院一区二区| 欧美日韩一级黄| 一区二区三区加勒比av| 99国产精品久久久久| 国产亚洲精品bt天堂精选| 国产一区二区视频在线播放| 日韩欧美电影在线| 日产欧产美韩系列久久99| 4hu四虎永久在线影院成人| 香蕉影视欧美成人| 欧美日韩一区精品| 亚洲一卡二卡三卡四卡无卡久久 | 亚洲精品写真福利| 一本大道久久a久久综合| 国产精品成人免费精品自在线观看| 国产aⅴ精品一区二区三区色成熟| 亚洲精品一线二线三线无人区| 久久国产精品99精品国产| 久久久亚洲欧洲日产国码αv| 精品中文av资源站在线观看| 26uuu色噜噜精品一区二区| 国产传媒日韩欧美成人| 国产精品麻豆欧美日韩ww| 91免费国产视频网站| 亚洲一区视频在线| 欧美一区二区成人6969| 韩国精品主播一区二区在线观看 | 91丨porny丨蝌蚪视频| 国产精品久久免费看| 色婷婷av一区二区| 视频在线观看国产精品| 日韩欧美亚洲另类制服综合在线| 国精产品一区一区三区mba桃花| 久久综合丝袜日本网| 成人国产一区二区三区精品| 亚洲夂夂婷婷色拍ww47 | 东方欧美亚洲色图在线| 日韩毛片高清在线播放| 欧美日韩国产a| 国产精品18久久久久久久久| 综合av第一页| 3d动漫精品啪啪1区2区免费| 国产丶欧美丶日本不卡视频| 一区二区免费在线播放| 精品va天堂亚洲国产| 色综合天天综合网天天看片| 免费在线观看一区二区三区| 国产精品美女一区二区三区| 欧美日韩的一区二区| 国产毛片精品视频| 香蕉久久夜色精品国产使用方法| 久久综合狠狠综合久久激情| 欧美性猛交xxxx乱大交退制版 | 不卡av免费在线观看| 日韩va亚洲va欧美va久久| 国产精品国产三级国产aⅴ中文| 91精品国产综合久久久久| 成人禁用看黄a在线| 久久精品国内一区二区三区| 亚洲人成在线观看一区二区| 欧美大片国产精品| 91精品婷婷国产综合久久竹菊| 9久草视频在线视频精品| 韩国视频一区二区| 日韩av电影免费观看高清完整版 | 在线视频一区二区免费| 国产盗摄女厕一区二区三区| 麻豆91精品91久久久的内涵| 亚洲精品欧美在线| 国产精品三级av| 国产亚洲精品福利| 精品美女在线播放| 欧美一区二区三区视频免费播放 | 波多野洁衣一区| 国产激情视频一区二区在线观看 | 亚洲精品美腿丝袜| 国产蜜臀97一区二区三区| 欧美精品一区二区三区一线天视频| 欧美日本高清视频在线观看| 在线观看亚洲精品| 色乱码一区二区三区88| 成人蜜臀av电影| 成人av一区二区三区| 国产大片一区二区| 成人一级片在线观看| 国产精品一区二区无线| 精品一二三四区| 精品一二三四区| 国产成人一区在线| 成人毛片在线观看| 99久久精品99国产精品 | 日韩成人一级大片| 日韩av二区在线播放| 玖玖九九国产精品| 国产精品香蕉一区二区三区| 国产黑丝在线一区二区三区| 国产成人高清在线| 成年人国产精品| 日本精品一区二区三区四区的功能| 91在线码无精品| 欧洲一区在线观看| 欧美一区二区精品| 久久夜色精品国产欧美乱极品| 久久影视一区二区| 中文字幕日韩一区| 一区二区国产视频| 奇米777欧美一区二区| 国产毛片精品一区| 91啦中文在线观看| 欧美日本精品一区二区三区| 精品嫩草影院久久| 国产精品进线69影院| 亚洲一级二级三级| 国内精品久久久久影院一蜜桃| 成人国产电影网| 欧美三区在线视频| 久久免费国产精品| 一个色在线综合| 国内精品久久久久影院色| 97久久超碰精品国产| 欧美日本精品一区二区三区| 久久色在线观看| 一区二区久久久久| 国内不卡的二区三区中文字幕 | 亚洲精品少妇30p| 美女www一区二区| 91网站黄www| 精品国产欧美一区二区| 亚洲欧洲av一区二区三区久久| 男女男精品视频| 欧美伊人久久大香线蕉综合69| 26uuu亚洲婷婷狠狠天堂| 一卡二卡欧美日韩|