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

📄 compiler.java

📁 上海复旦大学计算机系学子写的JAVA版本编译原理词法、语法分析程序(LR0)
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
				case 13:
					
					if(styleStr.get(index).equals("{")){
						state = 15;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else{
						jmp = false;
						error_text.appendText(("Error info: case 13 " + stateStack.get(stateStack.size() - 1) + " " +  styleStack.get(styleStack.size() - 1)));
					}
					break;
				case 14:
					
					if(styleStr.get(index).equals(";")){
						state = 16;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else{
						jmp = false;
						error_text.appendText(("Error info: case 14 " + stateStack.get(stateStack.size() - 1) + " " +  styleStack.get(styleStack.size() - 1)));
					}
					break;
				case 15:
					
					if(styleStr.get(index).equals("}")||styleStr.get(index).equals("return")){//规约
						/****************************/
						/**********M --> 空的规约 *****/
						/****************************/
						styleStack.add("M");
						stateStack.add(""+gotoState(Integer.parseInt((String)stateStack.get(stateStack.size() - 1)) ,"M"));
						state = Integer.parseInt(((String)stateStack.get(stateStack.size() - 1)));
					}else if(styleStr.get(index).equals("C")){
						state = 22;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else if(styleStr.get(index).equals("type")){
						state = 23;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else if(styleStr.get(index).equals("const")){
						state = 24;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else if(styleStr.get(index).equals("if")){
						state = 30;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else if(styleStr.get(index).equals("for")){
						state = 31;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else if(styleStr.get(index).equals("repeat")){
						state = 32;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else if(styleStr.get(index).equals("while")){
						state = 33;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else if(styleStr.get(index).equals("read")){
						state = 34;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else if(styleStr.get(index).equals("write")){
						state = 35;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else{
						jmp = false;
						error_text.appendText(("Error info: case 15 " + stateStack.get(stateStack.size() - 1) + " " +  styleStack.get(styleStack.size() - 1)));
					}
					
					break;
				case 16:
					if(styleStr.get(index).equals("type")){
						state = 12;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else if(styleStr.get(index).equals(")")){
						/****************************/
						/**********Z --> 空的规约 *****/
						/****************************/
						styleStack.add("Z");
						stateStack.add(""+gotoState(Integer.parseInt((String)stateStack.get(stateStack.size() - 1)) ,"Z"));
						state = Integer.parseInt(((String)stateStack.get(stateStack.size() - 1)));
					}else{
						jmp = false;
						error_text.appendText(("Error info: case 16 " + stateStack.get(stateStack.size() - 1) + " " +  styleStack.get(styleStack.size() - 1)));
					}
					break;
				case 17:
					if(styleStr.get(index).equals("}")){
						state = 37;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else{
						jmp = false;
						error_text.appendText(("Error info: case 17 " + stateStack.get(stateStack.size() - 1) + " " +  styleStack.get(styleStack.size() - 1)));
					}
					break;
				case 18:
					if(styleStr.get(index).equals("return")){
						state = 38;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else if(styleStr.get(index).equals("}")){
						styleStack.remove(styleStack.size() - 1);
						stateStack.remove(stateStack.size() - 1);
						styleStack.add("U");
						stateStack.add(""+gotoState(Integer.parseInt((String)stateStack.get(stateStack.size() - 1)) ,"U"));
						state = Integer.parseInt(((String)stateStack.get(stateStack.size() - 1)));
					}else{
						jmp = false;
						error_text.appendText(("Error info: case 18 " + stateStack.get(stateStack.size() - 1) + " " +  styleStack.get(styleStack.size() - 1)));
					}
					break;
				case 19:
					if(styleStr.get(index).equals("}") || styleStr.get(index).equals("return")){
						/****************************/
						/**********M --> 空的规约 *****/
						/****************************/
						styleStack.add("M");
						stateStack.add(""+gotoState(Integer.parseInt((String)stateStack.get(stateStack.size() - 1)) ,"M"));
						state = Integer.parseInt(((String)stateStack.get(stateStack.size() - 1)));
					}else if(styleStr.get(index).equals("C")){
						state = 22;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else if(styleStr.get(index).equals("type")){
						state = 23;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else if(styleStr.get(index).equals("const")){
						state = 24;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else if(styleStr.get(index).equals("if")){
						state = 30;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else if(styleStr.get(index).equals("for")){
						state = 31;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else if(styleStr.get(index).equals("repeat")){
						state = 32;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else if(styleStr.get(index).equals("while")){
						state = 33;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else if(styleStr.get(index).equals("read")){
						state = 34;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else if(styleStr.get(index).equals("write")){
						state = 35;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else{
						jmp = false;
						error_text.appendText(("Error info: case 19 " + stateStack.get(stateStack.size() - 1) + " " +  styleStack.get(styleStack.size() - 1)));
					}			
					break;
				case 20:
					if(styleStr.get(index).equals("}") || styleStr.get(index).equals("return")){
						/****************************/
						/**********M --> 空的规约 *****/
						/****************************/
						styleStack.add("M");
						stateStack.add(""+gotoState(Integer.parseInt((String)stateStack.get(stateStack.size() - 1)) ,"M"));
						state = Integer.parseInt(((String)stateStack.get(stateStack.size() - 1)));
					}else if(styleStr.get(index).equals("C")){
						state = 22;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else if(styleStr.get(index).equals("type")){
						state = 23;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else if(styleStr.get(index).equals("const")){
						state = 24;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else if(styleStr.get(index).equals("if")){
						state = 30;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else if(styleStr.get(index).equals("for")){
						state = 31;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else if(styleStr.get(index).equals("repeat")){
						state = 32;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else if(styleStr.get(index).equals("while")){
						state = 33;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else if(styleStr.get(index).equals("read")){
						state = 34;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else if(styleStr.get(index).equals("write")){
						state = 35;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else{
						jmp = false;
						error_text.appendText(("Error info: case 20 " + stateStack.get(stateStack.size() - 1) + " " +  styleStack.get(styleStack.size() - 1)));
					}			
					break;					
				case 21:
					if(styleStr.get(index).equals("}")||styleStr.get(index).equals("return")){
						/****************************/
						/**********M --> 空的规约 *****/
						/****************************/
						styleStack.add("M");
						stateStack.add(""+gotoState(Integer.parseInt((String)stateStack.get(stateStack.size() - 1)) ,"M"));
						state = Integer.parseInt(((String)stateStack.get(stateStack.size() - 1)));
					}else if(styleStr.get(index).equals("C")){
						state = 22;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else if(styleStr.get(index).equals("type")){
						state = 23;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else if(styleStr.get(index).equals("const")){
						state = 24;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else if(styleStr.get(index).equals("if")){
						state = 30;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else if(styleStr.get(index).equals("for")){
						state = 31;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else if(styleStr.get(index).equals("repeat")){
						state = 32;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else if(styleStr.get(index).equals("while")){
						state = 33;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else if(styleStr.get(index).equals("read")){
						state = 34;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else if(styleStr.get(index).equals("write")){
						state = 35;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else{
						jmp = false;
						error_text.appendText(("Error info: case 21 " + stateStack.get(stateStack.size() - 1) + " " +  styleStack.get(styleStack.size() - 1)));
					}			
					break;
				case 22:
					if(styleStr.get(index).equals("=")){
						state = 42;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else{
						jmp = false;
						error_text.appendText(("Error info: case 22 " + stateStack.get(stateStack.size() - 1) + " " +  styleStack.get(styleStack.size() - 1)) + " " + (String)programStr.get(index - 1) + " " + (String)styleStr.get(index) + " " + (String)programStr.get(index + 1) );//容易确定位置
					}					
					break;
				case 23:
					if(styleStr.get(index).equals("C")){
						state = 58;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else{
						jmp = false;
						error_text.appendText(("Error info: case 23 " + stateStack.get(stateStack.size() - 1) + " " +  styleStack.get(styleStack.size() - 1)));
					}	
					break;
				case 24:
					if(styleStr.get(index).equals("C")){
						state = 44;
						styleStack.add(styleStr.get(index));
						stateStack.add(""+state);
						index++;
					}else{
						jmp = false;
						error_text.appendText(("Error info: case 24 " + stateStack.get(stateStack.size() - 1) + " " +  styleStack.get(styleStack.size() - 1)));
					}	
					break;
				case 25:
					String s = (String)styleStr.get(index);
					/**********B -->L 的规约 *****/
					if(s.equals("C")||s.equals("type")||s.equals("const")||s.equals("if")||s.equals("for")||s.equals("repeat")||
							s.equals("while")||s.equals("read")||s.equals("write")||s.equals("}")||s.equals("return")){
						styleStack.remove(styleStack.size() - 1);
						stateStack.remove(stateStack.size() - 1);
						styleStack.add("B");
						stateStack.add(""+gotoState(Integer.parseInt((String)stateStack.get(stateStack.size() - 1)) ,"B"));
						state = Integer.parseInt(((String)stateStack.get(stateStack.size() - 1)));
					}else{
						jmp = false;
						error_text.appendText(("Error info: case 25 " + stateStack.get(stateStack.size() - 1) + " " +  styleStack.get(styleStack.size() - 1)));
					}
					break;
				case 26:
					String st = (String)styleStr.get(index);
					/**********B -->I 的规约 *****/
					if(st.equals("C")||st.equals("type")||st.equals("const")||st.equals("if")||st.equals("for")||st.equals("repeat")||
							st.equals("while")||st.equals("read")||st.equals("write")||st.equals("}")||st.equals("return")){
						styleStack.remove(styleStack.size() - 1);
						stateStack.remove(stateStack.size() - 1);
						styleStack.add("B");
						stateStack.add(""+gotoState(Integer.parseInt((String)stateStack.get(stateStack.size() - 1)) ,"B"));
						state = Integer.parseInt(((String)stateStack.get(stateStack.size() - 1)));
					}else{
						jmp = false;
						error_text.appendText(("Error info: case 26 " + stateStack.get(stateStack.size() - 1) + " " +  styleStack.get(styleStack.size() - 1)));
					}
					break;
				case 27:
					String st1 = (String)styleStr.get(index);
					/**********L -->F 的规约 *****/
					if(st1.equals("C")||st1.equals("type")||st1.equals("const")||st1.equals("if")||st1.equals("for")||st1.equals("repeat")||
							st1.equals("while")||st1.equals("read")||st1.equals("write")||st1.equals("}")||st1.equals("return")){
						styleStack.remove(styleStack.size() - 1);
						stateStack.remove(stateStack.size() - 1);

⌨️ 快捷键说明

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