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

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

?? parser.cup~2~

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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美国产1区2区| 亚洲麻豆国产自偷在线| 国产精品久久久久影院| 亚洲视频 欧洲视频| 日本强好片久久久久久aaa| 国产激情一区二区三区| 色偷偷久久人人79超碰人人澡| 日韩欧美精品三级| 亚洲欧美日韩中文字幕一区二区三区 | 国产丶欧美丶日本不卡视频| 97久久超碰国产精品| 91福利国产成人精品照片| 久久久久久久精| 婷婷国产在线综合| av成人免费在线观看| 欧美一二三区精品| 一区二区三区四区亚洲| 国产剧情一区二区| 日韩亚洲电影在线| 一区二区三区日本| 日韩精品午夜视频| 一道本成人在线| 三级欧美在线一区| 91久久精品一区二区| 久久久亚洲国产美女国产盗摄| 青青草国产成人av片免费| 99re6这里只有精品视频在线观看| 日韩欧美一级二级三级| 九九视频精品免费| 制服.丝袜.亚洲.另类.中文 | 午夜久久福利影院| 91麻豆免费观看| 国产精品美日韩| 成人国产亚洲欧美成人综合网| 欧美一级午夜免费电影| 亚洲妇熟xx妇色黄| 成人丝袜高跟foot| 中文字幕精品综合| 国产伦理精品不卡| 日韩一区二区三区视频| 亚洲不卡av一区二区三区| 欧洲国产伦久久久久久久| 国产精品国产a级| 成人精品gif动图一区| 国产精品久久久久一区二区三区| 国产乱码精品1区2区3区| 久久人人97超碰com| 狠狠色狠狠色合久久伊人| 欧美日韩一区二区三区四区五区| 日韩精品一区第一页| 欧美日韩一区三区四区| 久草中文综合在线| 精品成人一区二区三区四区| 精品无人码麻豆乱码1区2区 | 日韩精品亚洲一区二区三区免费| 91久久免费观看| 日日骚欧美日韩| 777xxx欧美| 国产不卡视频在线播放| 国产精品午夜在线观看| 成人精品视频一区| 亚洲线精品一区二区三区八戒| 欧美三级韩国三级日本一级| 精品伊人久久久久7777人| 精品国产麻豆免费人成网站| 成人午夜激情片| 亚洲综合色自拍一区| 欧美日韩在线免费视频| 国产在线乱码一区二区三区| 中文久久乱码一区二区| 欧美丰满少妇xxxxx高潮对白| 美女网站色91| 精品88久久久久88久久久| 91精彩视频在线| 日本不卡高清视频| 综合婷婷亚洲小说| 91精品福利视频| 国产精品自拍一区| 综合欧美亚洲日本| 91在线视频免费91| 九九视频精品免费| 国产精品久久网站| 日韩三级伦理片妻子的秘密按摩| 国产精品66部| 免费成人美女在线观看.| 国产日韩精品一区| 欧美喷水一区二区| 国产+成+人+亚洲欧洲自线| 亚洲大片在线观看| 国产午夜精品一区二区三区视频| 国产精品综合一区二区三区| 亚洲婷婷综合久久一本伊一区 | 国产999精品久久久久久| 亚洲欧美色一区| 欧美日韩精品系列| 成人动漫一区二区| 国产美女av一区二区三区| 亚洲综合区在线| 制服丝袜激情欧洲亚洲| 在线免费亚洲电影| 国产精品一卡二卡在线观看| 成人综合在线网站| 麻豆精品在线看| 久久人人97超碰com| 91精品在线观看入口| 精品一区二区在线视频| 日本视频一区二区| 亚洲一区av在线| 亚洲麻豆国产自偷在线| 国产亚洲一区二区在线观看| 337p粉嫩大胆噜噜噜噜噜91av| 91久久奴性调教| 色呦呦一区二区三区| 国产精品亚洲成人| 韩国三级在线一区| 日本aⅴ免费视频一区二区三区| 中文字幕第一区二区| 国产精品天天摸av网| 日韩欧美国产综合在线一区二区三区| 在线成人免费观看| 色综合久久综合网97色综合| 在线亚洲一区二区| 91亚洲永久精品| 91国内精品野花午夜精品| 99这里都是精品| 天天综合网天天综合色| 三级精品在线观看| 日日摸夜夜添夜夜添国产精品 | 成人激情免费电影网址| 国产一区二区三区美女| 国产一区二三区| 不卡的av在线播放| 北条麻妃国产九九精品视频| 日本韩国精品在线| 日本韩国欧美一区二区三区| 欧美日韩情趣电影| 欧美情侣在线播放| 久久新电视剧免费观看| 欧美成人精品3d动漫h| 欧美狂野另类xxxxoooo| 日韩欧美二区三区| 伊人夜夜躁av伊人久久| 亚洲欧美精品午睡沙发| 一区二区三区日韩在线观看| 国产精品欧美一级免费| 亚洲美女一区二区三区| 天天av天天翘天天综合网色鬼国产 | 欧美一级理论片| 精品久久人人做人人爰| 精品动漫一区二区三区在线观看| 国产精品网站导航| 一区二区三区在线视频观看58| 亚洲成人在线免费| 久久se精品一区二区| 成人免费视频一区| 欧美中文字幕一区二区三区| 欧美日韩三级视频| 国产午夜精品久久| 国产精品久久久爽爽爽麻豆色哟哟| 一区二区在线观看视频| 青青国产91久久久久久| av亚洲精华国产精华精| 欧美午夜精品一区二区蜜桃| 久久免费的精品国产v∧| 自拍偷拍亚洲欧美日韩| 麻豆精品一区二区三区| av在线一区二区| 欧美tk丨vk视频| 亚洲欧洲精品天堂一级| 久久精品久久精品| 99久久er热在这里只有精品66| 欧美一区二区三区视频在线| 国产精品第一页第二页第三页| 蜜臀av性久久久久蜜臀aⅴ四虎| 成人性生交大片免费看视频在线| heyzo一本久久综合| 日韩欧美的一区| 亚洲精品网站在线观看| 成人精品视频一区二区三区| 7777精品伊人久久久大香线蕉 | 一区二区三区欧美亚洲| 日本aⅴ亚洲精品中文乱码| 国产精品一区二区久久精品爱涩| 91黄色免费网站| 国产日本一区二区| 人人精品人人爱| 欧美伊人久久久久久久久影院| 精品福利视频一区二区三区| 日日夜夜免费精品视频| 色综合久久久网| 自拍偷拍欧美精品| 国产精品 欧美精品| 日韩精品一区二区三区swag| 亚洲影院免费观看| 狠狠色丁香婷婷综合| 精品视频在线免费看| 亚洲妇熟xx妇色黄| 一本久久综合亚洲鲁鲁五月天 | 亚洲自拍偷拍综合| 成人av影院在线|