⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yylex.java

📁 编译原理大作业---tiger编译器 包括semant,translate,mipsframe,regalloc等所有phase 懂的人自会知道
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package Parse;class Yylex implements Lexer {	private final int YY_BUFFER_SIZE = 512;	private final int YY_F = -1;	private final int YY_NO_STATE = -1;	private final int YY_NOT_ACCEPT = 0;	private final int YY_START = 1;	private final int YY_END = 2;	private final int YY_NO_ANCHOR = 4;	private final int YY_BOL = 128;	private final int YY_EOF = 129;private ErrorMsg.ErrorMsg errorMsg;private void newline() { errorMsg.newline(yychar); }// contatore annidamento commentiprivate int commentDepth = 0;private Integer temp;// variabile usata per la creazione di una stringaprivate String str;private void err(int pos, String s) { errorMsg.error(pos,s); }private void err(String s) { err(yychar,s); }private java_cup.runtime.Symbol tok(int kind, Object value) {    return new java_cup.runtime.Symbol(kind, yychar, yychar+yylength(), value);}Yylex(java.io.InputStream s, ErrorMsg.ErrorMsg e) {   this(s);   errorMsg = e;}private String[] asciiTable =   {"","","","","","","","","","","",    "","","","","","","","","","",    "","","","","","","","","","",    ""," ","!","\"","#","$","%","&","'","(",    ")","*","+",",","-",".","/","0","1","2",    "3","4","5","6","7","8","9",":",";","<",    "=",">","?","@","A","B","C","D","E","F",    "G","H","I","J","K","L","M","N","O","P",    "Q","R","S","T","U","V","W","X","Y","Z",    "[","\\","]","^","_","\'","a","b","c","d",    "e","f","g","h","i","j","k","l","m","n",    "o","p","q","r","s","t","u","v","w","x",    "y","z","{","|","}","~",""};	private java.io.BufferedReader yy_reader;	private int yy_buffer_index;	private int yy_buffer_read;	private int yy_buffer_start;	private int yy_buffer_end;	private char yy_buffer[];	private int yychar;	private boolean yy_at_bol;	private int yy_lexical_state;	Yylex (java.io.Reader reader) {		this ();		if (null == reader) {			throw (new Error("Error: Bad input stream initializer."));		}		yy_reader = new java.io.BufferedReader(reader);	}	Yylex (java.io.InputStream instream) {		this ();		if (null == instream) {			throw (new Error("Error: Bad input stream initializer."));		}		yy_reader = new java.io.BufferedReader(new java.io.InputStreamReader(instream));	}	private Yylex () {		yy_buffer = new char[YY_BUFFER_SIZE];		yy_buffer_read = 0;		yy_buffer_index = 0;		yy_buffer_start = 0;		yy_buffer_end = 0;		yychar = 0;		yy_at_bol = true;		yy_lexical_state = YYINITIAL;	}	private boolean yy_eof_done = false;	private final int STRING = 2;	private final int YYINITIAL = 0;	private final int COMMENT = 1;	private final int ESCAPES = 3;	private final int yy_state_dtrans[] = {		0,		48,		68,		72	};	private void yybegin (int state) {		yy_lexical_state = state;	}	private int yy_advance ()		throws java.io.IOException {		int next_read;		int i;		int j;		if (yy_buffer_index < yy_buffer_read) {			return yy_buffer[yy_buffer_index++];		}		if (0 != yy_buffer_start) {			i = yy_buffer_start;			j = 0;			while (i < yy_buffer_read) {				yy_buffer[j] = yy_buffer[i];				++i;				++j;			}			yy_buffer_end = yy_buffer_end - yy_buffer_start;			yy_buffer_start = 0;			yy_buffer_read = j;			yy_buffer_index = j;			next_read = yy_reader.read(yy_buffer,					yy_buffer_read,					yy_buffer.length - yy_buffer_read);			if (-1 == next_read) {				return YY_EOF;			}			yy_buffer_read = yy_buffer_read + next_read;		}		while (yy_buffer_index >= yy_buffer_read) {			if (yy_buffer_index >= yy_buffer.length) {				yy_buffer = yy_double(yy_buffer);			}			next_read = yy_reader.read(yy_buffer,					yy_buffer_read,					yy_buffer.length - yy_buffer_read);			if (-1 == next_read) {				return YY_EOF;			}			yy_buffer_read = yy_buffer_read + next_read;		}		return yy_buffer[yy_buffer_index++];	}	private void yy_move_end () {		if (yy_buffer_end > yy_buffer_start &&		    '\n' == yy_buffer[yy_buffer_end-1])			yy_buffer_end--;		if (yy_buffer_end > yy_buffer_start &&		    '\r' == yy_buffer[yy_buffer_end-1])			yy_buffer_end--;	}	private boolean yy_last_was_cr=false;	private void yy_mark_start () {		yychar = yychar			+ yy_buffer_index - yy_buffer_start;		yy_buffer_start = yy_buffer_index;	}	private void yy_mark_end () {		yy_buffer_end = yy_buffer_index;	}	private void yy_to_mark () {		yy_buffer_index = yy_buffer_end;		yy_at_bol = (yy_buffer_end > yy_buffer_start) &&		            ('\r' == yy_buffer[yy_buffer_end-1] ||		             '\n' == yy_buffer[yy_buffer_end-1] ||		             2028/*LS*/ == yy_buffer[yy_buffer_end-1] ||		             2029/*PS*/ == yy_buffer[yy_buffer_end-1]);	}	private java.lang.String yytext () {		return (new java.lang.String(yy_buffer,			yy_buffer_start,			yy_buffer_end - yy_buffer_start));	}	private int yylength () {		return yy_buffer_end - yy_buffer_start;	}	private char[] yy_double (char buf[]) {		int i;		char newbuf[];		newbuf = new char[2*buf.length];		for (i = 0; i < buf.length; ++i) {			newbuf[i] = buf[i];		}		return newbuf;	}	private final int YY_E_INTERNAL = 0;	private final int YY_E_MATCH = 1;	private java.lang.String yy_error_string[] = {		"Error: Internal error.\n",		"Error: Unmatched input.\n"	};	private void yy_error (int code,boolean fatal) {		java.lang.System.out.print(yy_error_string[code]);		java.lang.System.out.flush();		if (fatal) {			throw new Error("Fatal Error.\n");		}	}	private int[][] unpackFromString(int size1, int size2, String st) {		int colonIndex = -1;		String lengthString;		int sequenceLength = 0;		int sequenceInteger = 0;		int commaIndex;		String workString;		int res[][] = new int[size1][size2];		for (int i= 0; i < size1; i++) {			for (int j= 0; j < size2; j++) {				if (sequenceLength != 0) {					res[i][j] = sequenceInteger;					sequenceLength--;					continue;				}				commaIndex = st.indexOf(',');				workString = (commaIndex==-1) ? st :					st.substring(0, commaIndex);				st = st.substring(commaIndex+1);				colonIndex = workString.indexOf(':');				if (colonIndex == -1) {					res[i][j]=Integer.parseInt(workString);					continue;				}				lengthString =					workString.substring(colonIndex+1);				sequenceLength=Integer.parseInt(lengthString);				workString=workString.substring(0,colonIndex);				sequenceInteger=Integer.parseInt(workString);				res[i][j] = sequenceInteger;				sequenceLength--;			}		}		return res;	}	private int yy_acpt[] = {		/* 0 */ YY_NO_ANCHOR,		/* 1 */ YY_NO_ANCHOR,		/* 2 */ YY_NO_ANCHOR,		/* 3 */ YY_NO_ANCHOR,		/* 4 */ YY_NO_ANCHOR,		/* 5 */ YY_NO_ANCHOR,		/* 6 */ YY_NO_ANCHOR,		/* 7 */ YY_NO_ANCHOR,		/* 8 */ YY_NO_ANCHOR,		/* 9 */ YY_NO_ANCHOR,		/* 10 */ YY_NO_ANCHOR,		/* 11 */ YY_NO_ANCHOR,		/* 12 */ YY_NO_ANCHOR,		/* 13 */ YY_NO_ANCHOR,		/* 14 */ YY_NO_ANCHOR,		/* 15 */ YY_NO_ANCHOR,		/* 16 */ YY_NO_ANCHOR,		/* 17 */ YY_NO_ANCHOR,		/* 18 */ YY_NO_ANCHOR,		/* 19 */ YY_NO_ANCHOR,		/* 20 */ YY_NO_ANCHOR,		/* 21 */ YY_NO_ANCHOR,		/* 22 */ YY_NO_ANCHOR,		/* 23 */ YY_NO_ANCHOR,		/* 24 */ YY_NO_ANCHOR,		/* 25 */ YY_NO_ANCHOR,		/* 26 */ YY_NO_ANCHOR,		/* 27 */ YY_NO_ANCHOR,		/* 28 */ YY_NO_ANCHOR,		/* 29 */ YY_NO_ANCHOR,		/* 30 */ YY_NO_ANCHOR,		/* 31 */ YY_NO_ANCHOR,		/* 32 */ YY_NO_ANCHOR,		/* 33 */ YY_NO_ANCHOR,		/* 34 */ YY_NO_ANCHOR,		/* 35 */ YY_NO_ANCHOR,		/* 36 */ YY_NO_ANCHOR,		/* 37 */ YY_NO_ANCHOR,		/* 38 */ YY_NO_ANCHOR,		/* 39 */ YY_NO_ANCHOR,		/* 40 */ YY_NO_ANCHOR,		/* 41 */ YY_NO_ANCHOR,		/* 42 */ YY_NO_ANCHOR,		/* 43 */ YY_NO_ANCHOR,		/* 44 */ YY_NO_ANCHOR,		/* 45 */ YY_NO_ANCHOR,		/* 46 */ YY_NO_ANCHOR,		/* 47 */ YY_NO_ANCHOR,		/* 48 */ YY_NOT_ACCEPT,		/* 49 */ YY_NO_ANCHOR,		/* 50 */ YY_NO_ANCHOR,		/* 51 */ YY_NO_ANCHOR,		/* 52 */ YY_NO_ANCHOR,		/* 53 */ YY_NO_ANCHOR,		/* 54 */ YY_NO_ANCHOR,		/* 55 */ YY_NO_ANCHOR,		/* 56 */ YY_NO_ANCHOR,		/* 57 */ YY_NO_ANCHOR,		/* 58 */ YY_NO_ANCHOR,		/* 59 */ YY_NO_ANCHOR,		/* 60 */ YY_NO_ANCHOR,		/* 61 */ YY_NO_ANCHOR,		/* 62 */ YY_NO_ANCHOR,		/* 63 */ YY_START,		/* 64 */ YY_NO_ANCHOR,		/* 65 */ YY_NO_ANCHOR,		/* 66 */ YY_NO_ANCHOR,		/* 67 */ YY_NO_ANCHOR,		/* 68 */ YY_NOT_ACCEPT,		/* 69 */ YY_NO_ANCHOR,		/* 70 */ YY_NO_ANCHOR,		/* 71 */ YY_NO_ANCHOR,		/* 72 */ YY_NOT_ACCEPT,		/* 73 */ YY_NO_ANCHOR,		/* 74 */ YY_NO_ANCHOR,		/* 75 */ YY_NO_ANCHOR,		/* 76 */ YY_NOT_ACCEPT,		/* 77 */ YY_NO_ANCHOR,		/* 78 */ YY_NOT_ACCEPT,		/* 79 */ YY_NO_ANCHOR,		/* 80 */ YY_NOT_ACCEPT,		/* 81 */ YY_NO_ANCHOR,		/* 82 */ YY_NO_ANCHOR,		/* 83 */ YY_NO_ANCHOR,		/* 84 */ YY_NO_ANCHOR,		/* 85 */ YY_NO_ANCHOR,		/* 86 */ YY_NO_ANCHOR,		/* 87 */ YY_NO_ANCHOR,		/* 88 */ YY_NO_ANCHOR,		/* 89 */ YY_NO_ANCHOR,		/* 90 */ YY_NO_ANCHOR,		/* 91 */ YY_NO_ANCHOR,		/* 92 */ YY_NO_ANCHOR,		/* 93 */ YY_NO_ANCHOR,		/* 94 */ YY_NO_ANCHOR,		/* 95 */ YY_NO_ANCHOR,		/* 96 */ YY_NO_ANCHOR,		/* 97 */ YY_NO_ANCHOR,		/* 98 */ YY_NO_ANCHOR,		/* 99 */ YY_NO_ANCHOR,		/* 100 */ YY_NO_ANCHOR,		/* 101 */ YY_NO_ANCHOR,		/* 102 */ YY_NO_ANCHOR,		/* 103 */ YY_NO_ANCHOR,		/* 104 */ YY_NO_ANCHOR,		/* 105 */ YY_NO_ANCHOR,		/* 106 */ YY_NO_ANCHOR,		/* 107 */ YY_NO_ANCHOR,		/* 108 */ YY_NO_ANCHOR,		/* 109 */ YY_NO_ANCHOR,		/* 110 */ YY_NO_ANCHOR,		/* 111 */ YY_NO_ANCHOR,		/* 112 */ YY_NO_ANCHOR,		/* 113 */ YY_NO_ANCHOR,		/* 114 */ YY_NO_ANCHOR	};	private int yy_cmap[] = unpackFromString(1,130,"50:8,40,48,41,50,49,47,50:18,48,50,42,50:3,18,50,4,5,13,11,1,10,12,14,46:10" +",2,3,16,15,17,50:2,51:2,44,51:23,6,43,7,50,52,50,21,36,33,25,23,26,51,29,30" +",51,37,31,51,24,27,39,51,22,35,34,32,20,28,51,38,51,8,19,9,50:2,45,0")[0];	private int yy_rmap[] = unpackFromString(1,115,"0,1:2,2,1:11,3,1,4,5,1:2,6,7,1:8,8:17,9,1:6,10,1:9,11,12,13,14,15,16,17,18," +"19,20,21,22,23,24,25,20,8,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,4" +"2,43,44,45,46,47,48,49,50,51,8,52,53,54,55,56,57")[0];	private int yy_nxt[][] = unpackFromString(58,53,"1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,105,108,109,110,67,11" +"1,71,112,108,75,113,108:2,77,108,114,108:3,22,23,24,25,108,1,65,-1,22,25:2," +"108,25,-1:68,26,-1:50,27,-1:54,28,-1,29,-1:50,30,-1:57,108,79,108:18,-1:4,1" +"08,-1,81,-1:4,108,81,-1:40,22,-1:7,22,-1:24,108:20,-1:4,108,-1,81,-1:4,108," +"81,1,49:12,69,73,49:26,23,49:3,1,49,-1,49:5,-1:43,56,-1:55,65,-1:50,63,-1:2" +"8,108:7,31,108:12,-1:4,108,-1,81,-1:4,108,81,1,52:40,53,54,55,52,1,52:7,-1:" +"14,50,-1:84,78,-1:26,108:6,32,108:13,-1:4,108,-1,81,-1:4,108,81,1,57:23,58," +"57:9,59,57:6,60,61,62,57,66,70,76,74:2,57:3,-1:13,51,-1:82,62,-1:3,76,80:2," +"-1:23,108:4,33,108,34,108:13,-1:4,108,-1,81,-1:4,108,81,-1:41,80,-1:31,108:" +"7,35,108,90,108:8,91,108,-1:4,108,-1,81,-1:4,108,81,-1:46,64,-1:26,108:2,36" +",108:17,-1:4,108,-1,81,-1:4,108,81,-1:20,108:2,92,108:17,-1:4,108,-1,81,-1:" +"4,108,81,-1:20,108:5,37,108:14,-1:4,108,-1,81,-1:4,108,81,-1:20,108:15,93,1" +"08:4,-1:4,108,-1,81,-1:4,108,81,-1:20,108:11,38,108:8,-1:4,108,-1,81,-1:4,1" +"08,81,-1:20,108:2,39,108:17,-1:4,108,-1,81,-1:4,108,81,-1:20,108:4,94,108:1" +"5,-1:4,108,-1,81,-1:4,108,81,-1:20,108:10,95,108:9,-1:4,108,-1,81,-1:4,108," +"81,-1:20,108:14,40,108:5,-1:4,108,-1,81,-1:4,108,81,-1:20,108:3,96,108:16,-" +"1:4,108,-1,81,-1:4,108,81,-1:20,108:19,97,-1:4,108,-1,81,-1:4,108,81,-1:20," +"108,98,108:18,-1:4,108,-1,81,-1:4,108,81,-1:20,108:3,41,108:16,-1:4,108,-1," +"81,-1:4,108,81,-1:20,108:13,99,108:6,-1:4,108,-1,81,-1:4,108,81,-1:20,108:1" +"1,100,108:8,-1:4,108,-1,81,-1:4,108,81,-1:20,108:4,42,108:15,-1:4,108,-1,81" +",-1:4,108,81,-1:20,108:3,43,108:16,-1:4,108,-1,81,-1:4,108,81,-1:20,108:18," +"44,108,-1:4,108,-1,81,-1:4,108,81,-1:20,108:14,102,108:5,-1:4,108,-1,81,-1:" +"4,108,81,-1:20,108:3,45,108:16,-1:4,108,-1,81,-1:4,108,81,-1:20,108:17,46,1" +"08:2,-1:4,108,-1,81,-1:4,108,81,-1:20,108:10,103,108:9,-1:4,108,-1,81,-1:4," +"108,81,-1:20,108:7,104,108:12,-1:4,108,-1,81,-1:4,108,81,-1:20,108:4,47,108" +":15,-1:4,108,-1,81,-1:4,108,81,-1:20,108:2,82,108:17,-1:4,108,-1,81,-1:4,10" +"8,81,-1:20,108:3,107,108:16,-1:4,108,-1,81,-1:4,108,81,-1:20,108,101,108:18" +",-1:4,108,-1,81,-1:4,108,81,-1:20,108:4,83,108:6,84,108:8,-1:4,108,-1,81,-1" +":4,108,81,-1:20,108:10,85,108:9,-1:4,108,-1,81,-1:4,108,81,-1:20,108:7,86,1" +"08:4,87,108:7,-1:4,108,-1,81,-1:4,108,81,-1:20,108:9,88,108:10,-1:4,108,-1," +"81,-1:4,108,81,-1:20,108:3,89,108:16,-1:4,108,-1,81,-1:4,108,81,-1:20,108:2" +",106,108:17,-1:4,108,-1,81,-1:4,108,81");	public java_cup.runtime.Symbol nextToken ()		throws java.io.IOException {		int yy_lookahead;		int yy_anchor = YY_NO_ANCHOR;		int yy_state = yy_state_dtrans[yy_lexical_state];		int yy_next_state = YY_NO_STATE;		int yy_last_accept_state = YY_NO_STATE;		boolean yy_initial = true;		int yy_this_accept;		yy_mark_start();		yy_this_accept = yy_acpt[yy_state];		if (YY_NOT_ACCEPT != yy_this_accept) {			yy_last_accept_state = yy_state;			yy_mark_end();		}		while (true) {			if (yy_initial && yy_at_bol) yy_lookahead = YY_BOL;			else yy_lookahead = yy_advance();			yy_next_state = YY_F;			yy_next_state = yy_nxt[yy_rmap[yy_state]][yy_cmap[yy_lookahead]];			if (YY_EOF == yy_lookahead && true == yy_initial) {   {     // controlla se e' rimasto aperto qualche commento     if (commentDepth!=0) {        err(yychar-1,"Commento non chiuso.");        return null;     }     else return tok(sym.EOF, null);   }			}			if (YY_F != yy_next_state) {				yy_state = yy_next_state;				yy_initial = false;				yy_this_accept = yy_acpt[yy_state];				if (YY_NOT_ACCEPT != yy_this_accept) {					yy_last_accept_state = yy_state;					yy_mark_end();				}			}			else {				if (YY_NO_STATE == yy_last_accept_state) {					throw (new Error("Lexical Error: Unmatched Input."));				}				else {					yy_anchor = yy_acpt[yy_last_accept_state];					if (0 != (YY_END & yy_anchor)) {						yy_move_end();					}					yy_to_mark();					switch (yy_last_accept_state) {					case 0:						{ return tok(sym.INT,temp.valueOf(yytext()));}					case -2:						break;					case 1:											case -3:						break;					case 2:						{return tok(sym.COMMA, null);}					case -4:						break;					case 3:						{return tok(sym.COLON, null);}					case -5:						break;					case 4:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -