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

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

?? parser.cup~3~

?? 用Java實現的編譯器。把源代碼編譯成SPARC匯編程序
?? CUP~3~
?? 第 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.getMaxCallInParamSize());			:}			|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				;method_param_list

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产手机| 国产在线不卡一区| 欧美视频你懂的| 国产精品电影一区二区三区| 色综合天天天天做夜夜夜夜做| 日韩在线a电影| 亚洲国产欧美在线人成| 国产精品视频九色porn| 亚洲精品在线观| 精品国产免费人成在线观看| 欧美综合一区二区三区| 成人黄色一级视频| 在线视频一区二区三| 色呦呦一区二区三区| 日本韩国欧美一区| 欧美精品少妇一区二区三区| 欧美大片国产精品| 中文字幕av在线一区二区三区| 久久一区二区三区四区| 2020日本不卡一区二区视频| 国产欧美精品一区二区色综合| 久久久高清一区二区三区| 国产精品五月天| 亚洲一区二区精品视频| 美女视频一区在线观看| 粉嫩久久99精品久久久久久夜| 成人黄色综合网站| 欧美老肥妇做.爰bbww视频| 欧美在线免费视屏| 中文字幕不卡在线播放| 1024成人网| 亚洲成av人影院在线观看网| 日本亚洲最大的色成网站www| 日欧美一区二区| 免费精品99久久国产综合精品| 日韩不卡一区二区| 成人免费看黄yyy456| 色综合久久中文综合久久97 | 一区二区三区中文在线观看| 天堂va蜜桃一区二区三区 | 色婷婷综合视频在线观看| 国产视频一区二区三区在线观看 | 日本一区二区三级电影在线观看| 亚洲免费观看高清完整版在线观看熊| 日韩毛片视频在线看| 国产一区二区三区高清播放| 欧美日韩免费在线视频| 国产精品第一页第二页第三页 | 精品一区二区三区久久| 欧美疯狂性受xxxxx喷水图片| 一区二区三区四区中文字幕| 高清不卡在线观看| 久久久美女毛片| 奇米777欧美一区二区| 欧美成人三级在线| 午夜视黄欧洲亚洲| 欧美日韩视频第一区| 亚洲成人tv网| 欧美一区日韩一区| 国产综合久久久久影院| 欧美大肚乱孕交hd孕妇| 韩国精品主播一区二区在线观看 | 欧美日韩三级在线| 秋霞午夜av一区二区三区| 欧美日韩国产影片| 国产一区在线不卡| 国产精品久久久久久久第一福利| 91国产成人在线| 麻豆精品精品国产自在97香蕉| 久久午夜老司机| 91精品福利视频| 国产伦精品一区二区三区视频青涩| 国产亚洲欧美日韩俺去了| 99国产精品久| 久久国产精品第一页| 综合在线观看色| 欧美精品国产精品| 老司机精品视频导航| 99re成人在线| 亚洲国产视频网站| 精品乱码亚洲一区二区不卡| 成人免费视频app| 久久er99热精品一区二区| 亚洲精品乱码久久久久久黑人| 欧美成人欧美edvon| 精品国产免费一区二区三区香蕉| 4438x成人网最大色成网站| 91福利国产成人精品照片| 99国产精品久| 欧美性猛交一区二区三区精品| 欧美中文字幕亚洲一区二区va在线| yourporn久久国产精品| 91麻豆免费视频| 欧美日韩亚州综合| 精品成人私密视频| 久久久久久久网| 亚洲日本中文字幕区| 视频一区欧美日韩| 激情图区综合网| 91在线播放网址| 欧美日韩aaa| 国产精品国产成人国产三级| 伊人色综合久久天天人手人婷| 免费在线欧美视频| 国产69精品久久久久毛片| 在线观看亚洲专区| 日本一区二区久久| 天天综合网 天天综合色| 狠狠色丁香久久婷婷综合_中 | 日韩精品一区二区三区老鸭窝| 国产午夜亚洲精品午夜鲁丝片| 亚洲综合色网站| 国产不卡视频一区| 精品福利一二区| 亚洲一二三区不卡| 91麻豆成人久久精品二区三区| 日韩一区二区三区在线观看 | 7878成人国产在线观看| 国产婷婷一区二区| 日本亚洲视频在线| 欧美亚洲尤物久久| 亚洲电影一区二区三区| av午夜精品一区二区三区| 精品成人一区二区三区四区| 日本成人在线视频网站| 欧美图区在线视频| 一个色在线综合| 欧美色男人天堂| 日韩中文字幕区一区有砖一区 | 午夜亚洲国产au精品一区二区| 成人精品视频一区二区三区尤物| 精品国产一区二区三区忘忧草| 青娱乐精品在线视频| 欧美日韩中文字幕一区二区| 亚洲另类色综合网站| 色综合久久综合网97色综合| 成人欧美一区二区三区视频网页 | 一区二区三区日韩欧美| 欧美性色黄大片| 日韩精彩视频在线观看| 日韩三级精品电影久久久 | 国产精品三级av在线播放| av电影在线观看完整版一区二区| 自拍偷拍欧美精品| 欧美日韩在线一区二区| 久久精品国产精品亚洲红杏| 久久天天做天天爱综合色| av一区二区三区| 日日夜夜精品视频免费| 亚洲国产岛国毛片在线| 在线日韩国产精品| 国模娜娜一区二区三区| 免费看欧美女人艹b| 久久毛片高清国产| 欧美性高清videossexo| 国产91在线看| 五月婷婷激情综合网| 最新日韩在线视频| 欧美一区二区三区视频免费播放| 国产在线乱码一区二区三区| 亚洲尤物在线视频观看| 中文字幕国产一区二区| 日韩一区二区电影在线| 91电影在线观看| 成人av在线观| 成人av电影在线观看| 国产黄色精品网站| 欧美色涩在线第一页| 亚洲成人1区2区| 亚洲欧美激情插| 中文字幕一区二区三区在线观看| 欧美一区二区观看视频| 欧美剧在线免费观看网站| 91理论电影在线观看| 91蜜桃传媒精品久久久一区二区| 国产不卡视频一区| 国产精品资源在线| 国产麻豆午夜三级精品| 久国产精品韩国三级视频| 美女视频一区二区| 国产精品一区二区久久精品爱涩| 国产中文一区二区三区| 久久精品国产在热久久| 激情六月婷婷综合| 国内精品视频一区二区三区八戒| 欧美aaaaaa午夜精品| 精品一区二区三区蜜桃| 国产精品亚洲人在线观看| 成人精品一区二区三区四区 | 日韩一区二区三区免费观看| 日韩一区二区三区视频在线 | 91视频在线观看| 欧美日韩亚洲综合一区二区三区| 欧美一区二区高清| 中文字幕欧美激情| 婷婷中文字幕一区三区| 国产成人av影院| 欧美午夜视频网站| 国产欧美综合在线观看第十页| 亚洲免费av观看|