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

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

?? parser.cup~1~

?? 用Java實現的編譯器。把源代碼編譯成SPARC匯編程序
?? CUP~1~
?? 第 1 頁 / 共 2 頁
字號:
package parser;import java_cup.runtime.*;import java.util.*;import java.lang.String;import CatDecaf.SymTable.*;import CatDecaf.IR.*;import CatDecaf.Utilities.Debugger.*;//import SMA5503.IR.*;/* user code portion  */parser code {:public static ClassProgram classProgram;public static int curType, curOffset;public static SymbolTable curST, curScopeST;public static MethodDescriptor curMD;public static String infile;public static boolean debug; // = Compiler.PARSER_DEBUG;public void startParse(String i) throws Exception{    	parser.infile = i;    	this.parse();    }  /** Report a non fatal error (or warning).  This method takes a message   *  string and an additional object (to be used by specializations   *  implemented in subclasses).  Here in the base class a very simple   *  implementation is provided which simply prints the message to   *  System.err.   *   * @param message an error message.   * @param info    an extra object reserved for use by specialized subclasses.   */  public void report_error(String message, Object info)    {    	ClassProgram.numOfError++;    	ClassProgram.semanticCheck=false;    	      if (info instanceof Symbol)	if (((Symbol)info).left != -1)	System.out.println(parser.infile + ":"+ ((Symbol)info).left +			   ": Syntax error: '" + ((Symbol)info).value+"'");			   	//else System.err.println("");      //else System.err.println("");    }  /** Overriding original error message to handle the errors just before EOF   */  public void report_fatal_error(    String   message,    Object   info)    throws java.lang.Exception    {    	//ClassProgram.numOfError++;    	ClassProgram.semanticCheck=false;	System.out.println(parser.infile + ":" + Scanner.lineno +			   ": Syntax error:  missing '}'");     	      /* stop parsing */      done_parsing();    }:}action code {:/* This flag is used for printing DEBUG messages */public static boolean debug = parser.debug;public static Stmt stmtTemp = null;/* This function handles conversion of +ve integers and detection of over-sized +ve integers *//* This function handles conversion of -ve integers and detection of over-sized -ve integers */public static Exp convPos( Exp e, int lineNo ){	//if not a direct interger, not handling at all	if (!(e instanceof LtrInt)) 		return e; 		LtrInt ltrInt = (LtrInt)e;	//if already converted, not handling again, 	if (ltrInt.converted()) return e;		int intNum;	String intStr = ltrInt.getIntString();		try{		if (intStr.startsWith("0x")){ //always take as Uminus a Positive			intNum = Integer.parseInt(intStr.substring(2), 16);			//if (debug) System.out.println("Processed integer (+ve integer) at line (" + lineNo + "): " + intStr + "-> " + intNum);		}else{ //decimal is always a negative number here			intNum = Integer.parseInt(intStr);			//if (debug) System.out.println("Processed integer (+ve integer) at line (" + lineNo + "): " + intStr);						}		ltrInt.convNum(intNum);		return ltrInt;			}catch(NumberFormatException err){		System.err.println(parser.infile + ": "+ lineNo +": Integer above upper bound: '"+intStr+"'");		ClassProgram.numOfError++;		ltrInt.convNum(1); //default negative number		return ltrInt;	}		}/* This function handles conversion of -ve integers and detection of over-sized -ve integers */public static Exp convNeg( Exp e, int lineNo ){	//if not a direct interger, not handling at all	if (!(e instanceof LtrInt)) 		return new ExpUMinus((Exp)e); 		LtrInt ltrInt = (LtrInt)e;	//if already converted, not handling again, 	if (ltrInt.converted()) return new ExpUMinus((Exp)e);		int intNum;	String intStr = ltrInt.getIntString();		try{		if (intStr.startsWith("0x")){ //always take as Uminus a Positive			intNum = Integer.parseInt("-"+intStr.substring(2), 16);			//if (debug) System.out.println("Processed integer (-ve integer) at line (" + lineNo + "): " + intStr + " -> " + intNum);					}else{ //decimal is always a negative number here			intNum = Integer.parseInt("-"+intStr);			//if (debug) System.out.println("Processed integer (-ve integer) at line (" + lineNo + "): -" + intStr);		}		ltrInt.convNum(intNum);		return ltrInt;			}catch(NumberFormatException err){		System.err.println(parser.infile + ": "+ lineNo +": Integer below lower bound: '-"+intStr+"'");		ClassProgram.numOfError++;			ltrInt.convNum(-1); //default negative number		return ltrInt;	}}:}/* Terminals (tokens returned by the scanner). */terminal	ASSIGN,UMINUS;terminal  COMMA,SEMI, LPAREN, RPAREN, LSQUARE, RSQUARE, LCURLY, RCURLY;terminal 	SHIFTLEFT, SHIFTRIGHT, PLUS, MINUS, MULT, DIVIDE, MOD;terminal  	LESSTHAN, GREATERTHAN,LTOE,GTOE,EQUAL,NOTEQUAL,AND,OR;terminal	BOOLEAN, CALLOUT, CLASS, ELSE, EXTENDS, BOOLFALSE, FOR, IF, INT, NEW;terminal	NULL, RETURN, THIS, BOOLTRUE, VOID, WHILE;terminal 	CHARLIT, ERROR_TYPE, NO_TYPE;terminal String ID, STRINGLIT, INTLIT;/* Non terminals */nonterminal program, field_decl_list, method_decl_list, field_decl, method_decl;nonterminal type;nonterminal global_var_list, local_var;nonterminal method_param_list, method_param;nonterminal block, var_decl_list, statement_list, var_decl, statement, local_var_list;nonterminal expr, location, method_call, literal, bool_literal;/*nonterminal bit_op, arith_op, rel_op, eq_op, bin_op, cond_op;*/nonterminal expr_list, callout_arg_list, callout_arg;nonterminal empty, prog_content, global_var, method_decl_content;nonterminal else_content, return_content, method_call_content, callout_content, expr_bin_op_expr;/* precedence */precedence left OR;precedence left AND;precedence left EQUAL, NOTEQUAL;precedence nonassoc LESSTHAN, GREATERTHAN,LTOE,GTOE;precedence left PLUS, MINUS;precedence left MULT, DIVIDE, MOD;precedence left UMINUS;precedence left SHIFTLEFT, SHIFTRIGHT;/* The grammar */program 		::= 	CLASS ID:classname 							{:if(!classname.equals("Program")) {								    	ClassProgram.numOfError++;								    	ClassProgram.semanticCheck=false;									System.out.println(parser.infile + ":"+ classnameleft +": Invalid class name '" + classname +"'");											} :}				LCURLY:line {: if(debug) System.out.println("At Line ("+lineleft+"): program -> class Program { }");					parser.classProgram = new ClassProgram(); parser.classProgram.fieldVar.assertFieldST(); parser.curOffset = 0;				:}			prog_content:p RCURLY {: parser.classProgram.methods.checkIfMainExists();   RESULT = p; :}			|	error				;prog_content 	::= 	field_decl_list:fdl 			{:  					RESULT = new IrProg(((FdDeclList)fdl).reverse(),null);							:}			| 	method_decl_list:mdl 				{:  RESULT = new IrProg(null, ((MdDeclList)mdl).reverse()); :}			| 	field_decl_list:fdl 				method_decl_list:mdl 				{:  RESULT = new IrProg( ((FdDeclList)fdl).reverse(), ((MdDeclList)mdl).reverse()); :}			|	empty;field_decl_list	::=	field_decl_list:fdl_lst field_decl:fdl 			{:  parser.classProgram.fieldVar.setSymbolTableSize(parser.curOffset); RESULT = new FdDeclList((FdDecl)fdl,(FdDeclList)fdl_lst); :}			|	field_decl:fdl 				{:  parser.classProgram.fieldVar.setSymbolTableSize(parser.curOffset); RESULT = new FdDeclList((FdDecl)fdl,null); :}				;field_decl		::=	type:t global_var_list:gld_lst SEMI:line 					{: 					if(debug) System.out.println("At Line ("+lineleft+"): field_decl -> int/boolean/array ");					RESULT = new FdDecl((Typ)t, ((GlbVarList)gld_lst).reverse()); 				:}|	error;global_var_list	::= 	global_var_list:glb_lst COMMA global_var:glb_var 			{:  RESULT = new GlbVarList((GlbVar)glb_var,(GlbVarList)glb_lst); :}			|	global_var:glb_var 				{:  RESULT = new GlbVarList((GlbVar)glb_var,null); :}				;global_var	::=	ID:id 			{:				IDDescriptor idd = new IDDescriptor(id, parser.curType); idd.assertFieldDescriptor();				idd.setOffset(parser.curOffset); parser.curOffset += 4; // 32 bits for each field variable				parser.classProgram.fieldVar.addDescriptor(idd); 				RESULT = new GlbVarId( new Identifier(id, sym.NO_TYPE) ); 			:}			|ID:id LSQUARE INTLIT:s RSQUARE 			{:				LtrInt sInt = (LtrInt)convPos(new LtrInt(s), sleft);				int arraySize = sInt.ltrInt_;				IDDescriptor idd = new IDDescriptor(id, parser.curType,  arraySize); idd.assertFieldDescriptor();				idd.setOffset(parser.curOffset); parser.curOffset += 4 * arraySize + 4; //extra 4 bytes to store array size				parser.classProgram.fieldVar.addDescriptor(idd);				RESULT = new GlbVarArray(new Identifier(id, sym.NO_TYPE), sInt); //Array size error message reported in here							:}			|ID:id LSQUARE MINUS INTLIT:s RSQUARE //should be an error here			{:				LtrInt sInt = (LtrInt)convNeg(new LtrInt(s), sleft);				int arraySize = sInt.ltrInt_;				IDDescriptor idd = new IDDescriptor(id, parser.curType,  arraySize); idd.assertFieldDescriptor();				idd.setOffset(parser.curOffset); parser.curOffset += 4 * arraySize + 4; 				parser.classProgram.fieldVar.addDescriptor(idd);								RESULT = new GlbVarArray(new Identifier(id, sym.NO_TYPE), sInt); //Array size error message reported in here			:};type			::=	INT 				{: 					parser.curType = sym.INT; 					RESULT = new TypInt(); 				:}			| 	BOOLEAN 				{: 					parser.curType = sym.BOOLEAN; 					RESULT = new TypBool(); 				:}				;method_decl_list	::=	method_decl_list:mdl_lst method_decl:mdl 				{:  RESULT = new MdDeclList((MdDecl)mdl,(MdDeclList)mdl_lst); :}				|	method_decl:mdl 				{:  RESULT = new MdDeclList((MdDecl)mdl,null); :}				;method_decl	::=	type:t ID:id 			{: parser.curMD = new MethodDescriptor(id, parser.curType); parser.curST = new SymbolTable(); parser.curOffset = 0;:}			LPAREN:line					{: if(debug) System.out.println("At Line ("+lineleft+"): method_decl -> int/boolean"); :}			method_decl_content:md_par_lst			RPAREN 			{: parser.curST.setParent(parser.classProgram.fieldVar); parser.curST.assertParamST(); parser.curMD.setParam(parser.curST); parser.curScopeST = parser.curST; 				parser.curMD.setParamSize(parser.curOffset);				(parser.classProgram.methods).addDescriptor(parser.curMD); 				parser.curOffset = 0;:}			block:blk 			{: 				parser.curMD.checkFoundReturnStatement(); parser.curMD.setLocalSize(parser.curOffset);				RESULT = new MdDecl((Typ)t,new Identifier(id, sym.NO_TYPE),md_par_lst==null? null:((MdParaList)md_par_lst).reverse(),(Block)blk, parser.curMD.getLocalSize(), parser.curMD.getParamSize()); 			:}			|VOID ID:id 			{: parser.curMD = new MethodDescriptor(id, sym.VOID); parser.curST = new SymbolTable(); parser.curOffset = 0;:}			 LPAREN:line 					 {: if(debug) System.out.println("At Line ("+lineleft+"): method_decl -> void"); :}			method_decl_content:md_par_lst			RPAREN 			{: parser.curST.setParent(parser.classProgram.fieldVar); parser.curST.assertParamST(); parser.curMD.setParam(parser.curST); parser.curScopeST = parser.curST;				parser.curMD.setParamSize(parser.curOffset);				(parser.classProgram.methods).addDescriptor(parser.curMD);				parser.curOffset = 0;  :}			block:blk 			{: 				parser.curMD.setLocalSize(parser.curOffset);				RESULT = new MdDecl(new TypVoid(),new Identifier(id, sym.NO_TYPE),md_par_lst==null? null:((MdParaList)md_par_lst).reverse(),(Block)blk, parser.curMD.getLocalSize(), parser.curMD.getParamSize()); 			:};method_decl_content			::=	method_param_list: md_para_lst 			{:  RESULT = md_para_lst; :}			|	empty				;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲亚洲精品在线观看| 成人的网站免费观看| 国产精品影视网| 精品视频色一区| 欧美高清在线一区| 蜜桃视频一区二区| 欧美在线你懂的| 国产精品久久二区二区| 美女网站视频久久| 欧美乱妇15p| 一区二区三区在线观看国产| 国产69精品久久久久777| 欧美一区二区三区思思人 | eeuss鲁一区二区三区| 欧美一区二区三区色| 亚洲成人av中文| 色88888久久久久久影院野外| 国产亚洲欧美色| 久草中文综合在线| 精品国内二区三区| 麻豆一区二区在线| 欧美一级片在线观看| 午夜精品在线视频一区| 欧美午夜影院一区| 一区二区三区免费观看| 91免费看`日韩一区二区| 国产日韩欧美a| 成人丝袜18视频在线观看| 久久久国产午夜精品| 国产一区在线看| 2023国产精品| 国产99一区视频免费| 久久久91精品国产一区二区精品| 久久成人免费网| 欧美mv和日韩mv国产网站| 美腿丝袜亚洲三区| 日韩久久久久久| 国产成人久久精品77777最新版本| 2欧美一区二区三区在线观看视频| 亚洲一本大道在线| 91精品国产综合久久精品| 天天操天天综合网| 日韩欧美久久久| 国产永久精品大片wwwapp| 久久久99精品久久| 99精品视频在线观看| 亚洲色欲色欲www| 欧美丝袜丝交足nylons图片| 午夜精品久久一牛影视| 日韩精品综合一本久道在线视频| 加勒比av一区二区| 中文字幕乱码日本亚洲一区二区| 99精品视频在线观看免费| 亚洲综合色在线| 欧美成人一区二区三区在线观看| 国产一区二区成人久久免费影院 | 国产91精品久久久久久久网曝门| 中文成人av在线| 欧美在线综合视频| 蜜桃久久精品一区二区| 国产欧美综合在线| 日本韩国精品在线| 狠狠狠色丁香婷婷综合激情| 欧美国产一区二区在线观看| 欧洲精品一区二区| 黄色精品一二区| 怡红院av一区二区三区| 日韩欧美高清dvd碟片| 成人在线视频一区二区| 亚洲成a人v欧美综合天堂下载| 欧美一区二区三区日韩| 99久精品国产| 国产在线视频不卡二| 亚洲色图欧洲色图婷婷| 日韩写真欧美这视频| 99亚偷拍自图区亚洲| 六月婷婷色综合| 一区二区三区久久| www激情久久| 欧美亚洲免费在线一区| 成人免费观看av| 麻豆视频一区二区| 一个色综合网站| 中文字幕不卡在线观看| 7777精品伊人久久久大香线蕉经典版下载 | 久久久www免费人成精品| 欧美日韩综合一区| 成人手机在线视频| 精品在线播放午夜| 亚洲成av人片在线观看| 国产精品国产精品国产专区不片| 欧美大片在线观看一区| 欧美丝袜丝交足nylons| 91免费在线播放| 国产成人在线电影| 久久国内精品视频| 爽好久久久欧美精品| 一区二区三区波多野结衣在线观看| 国产日韩欧美激情| 久久亚洲综合av| 日韩欧美一区二区三区在线| 欧美日韩国产a| 色婷婷亚洲一区二区三区| 成人美女在线观看| 东方欧美亚洲色图在线| 国产美女主播视频一区| 精品一区二区三区在线观看国产| 蜜臀av一区二区| 人人超碰91尤物精品国产| 亚洲风情在线资源站| 亚洲国产美女搞黄色| 亚洲国产日韩a在线播放| 亚洲激情男女视频| 亚洲乱码一区二区三区在线观看| 国产精品卡一卡二卡三| 亚洲国产成人午夜在线一区 | 亚洲免费三区一区二区| 中文字幕一区日韩精品欧美| 国产精品乱人伦| 国产精品久久久久久久岛一牛影视| 国产精品久久久久久亚洲伦| 中文字幕一区二| 亚洲日穴在线视频| 夜夜嗨av一区二区三区| 亚洲国产成人porn| 午夜精品影院在线观看| 日韩不卡一区二区三区| 蜜桃av一区二区三区| 国产精品一区二区免费不卡| 国产成人一级电影| av电影天堂一区二区在线观看| 色婷婷综合久久久中文字幕| 欧美日韩一区二区电影| 日韩午夜激情免费电影| 久久婷婷国产综合国色天香 | 日韩午夜在线观看| 久久久高清一区二区三区| 亚洲视频一区二区在线| 伊人性伊人情综合网| 日韩av二区在线播放| 国模娜娜一区二区三区| 99久久99久久免费精品蜜臀| 欧美性xxxxx极品少妇| 日韩欧美色电影| 欧美国产一区视频在线观看| 亚洲一区av在线| 九九九精品视频| 色综合久久久久网| 欧美成人伊人久久综合网| 国产精品动漫网站| 日韩电影一区二区三区| 国产成人在线网站| 欧美三级日韩三级| 国产日韩欧美麻豆| 婷婷六月综合亚洲| 成人免费高清在线观看| 3d动漫精品啪啪一区二区竹菊| 久久综合av免费| 夜夜揉揉日日人人青青一国产精品| 国产自产视频一区二区三区| 欧美主播一区二区三区| 国产视频911| 午夜精品福利在线| 97久久精品人人澡人人爽| 正在播放亚洲一区| 中文字幕av一区二区三区高| 日本美女一区二区| 色综合天天狠狠| 精品999在线播放| 五月综合激情网| 色呦呦国产精品| 中文字幕不卡的av| 国产中文一区二区三区| 51精品国自产在线| 亚洲欧美日韩人成在线播放| 精品一区二区三区香蕉蜜桃| 欧美亚洲日本国产| 亚洲美女视频一区| 国产成人av一区二区三区在线 | 欧美性感一类影片在线播放| 亚洲国产成人自拍| 国产精品亚洲午夜一区二区三区| 欧美精品一二三| 亚洲综合男人的天堂| 不卡的电影网站| 亚洲国产精品二十页| 精品一区二区三区在线播放视频 | 久久精品久久精品| 欧美精品高清视频| 午夜激情久久久| 欧美日韩高清一区二区| 亚洲在线免费播放| 91成人在线精品| 一区二区三区日韩欧美精品| 91免费在线播放| 亚洲美女一区二区三区| 色婷婷久久综合| 国产精品―色哟哟| 成人av电影在线观看| 国产精品蜜臀在线观看|