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

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

?? parser.cup

?? 用Java實現的編譯器。把源代碼編譯成SPARC匯編程序
?? CUP
?? 第 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();    }/* 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;	}}:}action code {:/* This flag is used for printing DEBUG messages */public static boolean debug = parser.debug;public static Stmt stmtTemp = null;:}/* 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 right OR;precedence right 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)parser.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)parser.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.getMaxCallInParamSize());			:};method_decl_content			::=	method_param_list: md_para_lst			{:  RESULT = md_para_lst; :}			|	empty				;method_param_list			::= 	method_param_list:md_para_lst COMMA method_param:md_para			{:  RESULT = new MdParaList((MdPara)md_para,(MdParaList)md_para_lst); :}			|	method_param:md_para

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品色噜噜| 亚洲欧洲美洲综合色网| 欧美一二三区在线观看| 久久久99精品久久| 亚洲视频图片小说| 亚洲成人免费视| 国产69精品久久99不卡| 在线观看亚洲a| 精品国产一区二区精华| 综合在线观看色| 亚洲精品视频在线观看免费| 日韩和欧美的一区| 99精品视频在线观看免费| 91精品国产综合久久精品图片 | 久久精品夜色噜噜亚洲a∨| 日韩理论片在线| 男人操女人的视频在线观看欧美 | 久久精品夜色噜噜亚洲a∨| 亚洲欧美aⅴ...| 激情六月婷婷综合| 欧美揉bbbbb揉bbbbb| 中文字幕高清不卡| 看片的网站亚洲| 99精品视频在线免费观看| 日韩欧美美女一区二区三区| 国产亚洲一区二区在线观看| 丝袜美腿亚洲一区| 色综合网色综合| 国产精品天干天干在线综合| 日韩av在线发布| 欧洲国产伦久久久久久久| 久久久精品一品道一区| 奇米影视一区二区三区小说| 99re66热这里只有精品3直播| 2017欧美狠狠色| 蜜桃av噜噜一区二区三区小说| 色呦呦网站一区| 精品国产一区久久| 三级久久三级久久久| 91黄色免费版| 玉米视频成人免费看| av不卡免费在线观看| 欧美激情一区二区| 激情图区综合网| 精品欧美一区二区在线观看| 男女男精品视频网| 日韩精品一区二区三区视频播放 | 视频一区中文字幕国产| 日本久久一区二区| 亚洲精品视频在线| 欧美亚洲一区二区在线| 亚洲精品国产一区二区精华液| 成人h动漫精品一区二| 久久天堂av综合合色蜜桃网| 日韩不卡一区二区三区| 欧美喷水一区二区| 日韩电影一区二区三区| 日韩一区二区三区三四区视频在线观看| 一区二区三区蜜桃网| 日本道色综合久久| 亚洲不卡一区二区三区| 69堂国产成人免费视频| 丝袜诱惑亚洲看片| 精品国产一区二区三区久久久蜜月 | 久久精品999| 精品久久国产字幕高潮| 国产麻豆精品95视频| 国产精品另类一区| 色乱码一区二区三区88| 亚洲国产精品一区二区尤物区| 欧美日韩国产综合视频在线观看 | 欧美mv和日韩mv的网站| 精品一区二区三区在线观看| 欧美国产欧美综合| 色综合天天做天天爱| 婷婷综合在线观看| 日韩精品自拍偷拍| 波多野结衣中文一区| 亚洲最大成人网4388xx| 欧美va亚洲va| 韩国女主播成人在线| 久久综合九色综合97婷婷女人| 国产不卡在线视频| 五月综合激情日本mⅴ| 精品国产免费一区二区三区四区| 成人小视频免费观看| 洋洋成人永久网站入口| 日韩免费视频一区二区| 99麻豆久久久国产精品免费| 午夜精品福利在线| 国产日韩综合av| 91年精品国产| 黄色日韩网站视频| 亚洲电影一级片| 国产精品美女久久久久久久| 欧美老肥妇做.爰bbww视频| 国产一区二区美女| 亚洲成av人**亚洲成av**| 国产精品三级久久久久三级| 欧美揉bbbbb揉bbbbb| 丰满少妇在线播放bd日韩电影| 亚洲不卡一区二区三区| 国产午夜精品久久久久久久| 欧美日韩一区在线观看| www.综合网.com| 国产一区二区三区四区五区美女| 亚洲第一成年网| 亚洲欧美另类久久久精品 | 日韩欧美不卡一区| 色域天天综合网| 粉嫩在线一区二区三区视频| 另类小说视频一区二区| 亚洲最新在线观看| 精品美女一区二区三区| 337p亚洲精品色噜噜| 99热这里都是精品| 国产91丝袜在线播放九色| 日韩不卡一区二区三区| 亚洲一区免费观看| 亚洲女女做受ⅹxx高潮| 中文字幕中文乱码欧美一区二区| 在线综合视频播放| 91免费观看视频在线| 成人激情文学综合网| 韩国视频一区二区| 日本欧美在线观看| 视频一区在线视频| 亚洲成人tv网| 亚洲成人综合网站| 亚洲大片精品永久免费| 亚洲综合一区在线| 夜夜爽夜夜爽精品视频| 中文字幕欧美日韩一区| 国产欧美一区在线| 中文字幕精品在线不卡| 国产精品入口麻豆九色| 中文天堂在线一区| 中文字幕在线观看一区| 日韩一区在线看| 亚洲免费观看高清完整版在线观看熊 | 久久精品一区二区| 国产精品天干天干在线综合| 国产精品久久久久影院| 亚洲精品中文在线影院| 午夜欧美视频在线观看| 久久久美女艺术照精彩视频福利播放| 国产片一区二区| 亚洲二区在线视频| 国产成人综合亚洲网站| 欧美亚洲动漫另类| 久久综合色鬼综合色| 一区二区三区在线看| 精彩视频一区二区三区| 欧美日韩免费电影| 久久视频一区二区| 中文字幕一区二区三中文字幕| 香蕉av福利精品导航| 国产成人精品免费网站| 91精品婷婷国产综合久久性色 | 日韩av在线发布| 国产成人av电影在线| 欧美夫妻性生活| 国产精品护士白丝一区av| 免费成人在线播放| 色婷婷综合久久久| 国产精品色在线观看| 精东粉嫩av免费一区二区三区| 91福利视频久久久久| 中文在线一区二区| 老司机午夜精品99久久| 欧美日韩精品免费| 国产精品护士白丝一区av| 国产一区二区三区电影在线观看| 欧美日韩精品一区二区三区四区 | av日韩在线网站| 久久综合中文字幕| 蓝色福利精品导航| 91精品国产黑色紧身裤美女| 一区二区三区欧美在线观看| 成人aaaa免费全部观看| 国产香蕉久久精品综合网| 麻豆精品精品国产自在97香蕉| 在线观看视频91| 亚洲区小说区图片区qvod| jlzzjlzz亚洲女人18| 国产欧美一区二区三区鸳鸯浴 | 视频一区免费在线观看| 色综合久久天天| 中文字幕五月欧美| 高清成人在线观看| 久久久精品蜜桃| 国产suv精品一区二区6| 久久精品视频一区二区三区| 国产一区二区按摩在线观看| 欧美精品一区二区久久婷婷| 日韩av中文在线观看| 日韩一级黄色片| 国内精品在线播放| 久久久蜜桃精品| 丰满白嫩尤物一区二区|