compiler.java
来自「上海复旦大学计算机系学子写的JAVA版本编译原理词法、语法分析程序(LR0)」· Java 代码 · 共 1,869 行 · 第 1/5 页
JAVA
1,869 行
index++;
}else if(styleStr.get(index).equals("C")){
state = 55;
styleStack.add(styleStr.get(index));
stateStack.add(""+state);
index++;
}else if(styleStr.get(index).equals("K")){
state = 56;
styleStack.add(styleStr.get(index));
stateStack.add(""+state);
index++;
}else{
jmp = false;
error_text.appendText(("Error info: case 48 " + stateStack.get(stateStack.size() - 1) + " " + styleStack.get(styleStack.size() - 1)));
}
break;
case 49:
if(styleStr.get(index).equals("C")){
state = 66;
styleStack.add(styleStr.get(index));
stateStack.add(""+state);
index++;
}else{
jmp = false;
error_text.appendText(("Error info: case 49 " + stateStack.get(stateStack.size() - 1) + " " + styleStack.get(styleStack.size() - 1)));
}
break;
case 50:
if(styleStr.get(index).equals("C")){
state = 67;
styleStack.add(styleStr.get(index));
stateStack.add(""+state);
index++;
}else if(styleStr.get(index).equals(new String('"'+""))){
state = 68;
styleStack.add(styleStr.get(index));
stateStack.add(""+state);
index++;
}else{
jmp = false;
error_text.appendText(("Error info: case 50 " + stateStack.get(stateStack.size() - 1) + " " + styleStack.get(styleStack.size() - 1)));
}
break;
case 51:
if(styleStr.get(index).equals("@")){
styleStack.remove(styleStack.size() - 1);
stateStack.remove(stateStack.size() - 1);
styleStack.remove(styleStack.size() - 1);
stateStack.remove(stateStack.size() - 1);
styleStack.remove(styleStack.size() - 1);
stateStack.remove(stateStack.size() - 1);
styleStack.remove(styleStack.size() - 1);
stateStack.remove(stateStack.size() - 1);
styleStack.remove(styleStack.size() - 1);
stateStack.remove(stateStack.size() - 1);
styleStack.remove(styleStack.size() - 1);
stateStack.remove(stateStack.size() - 1);
styleStack.remove(styleStack.size() - 1);
stateStack.remove(stateStack.size() - 1);
styleStack.remove(styleStack.size() - 1);
stateStack.remove(stateStack.size() - 1);
styleStack.remove(styleStack.size() - 1);
stateStack.remove(stateStack.size() - 1);
styleStack.add("P");
stateStack.add(""+gotoState(Integer.parseInt((String)stateStack.get(stateStack.size() - 1)) ,"P"));
state = Integer.parseInt(((String)stateStack.get(stateStack.size() - 1)));
}else{
jmp = false;
error_text.appendText(("Error info: case 51 " + stateStack.get(stateStack.size() - 1) + " " + styleStack.get(styleStack.size() - 1)));
}
break;
case 52:
if(styleStr.get(index).equals(";")){
state = 69;
styleStack.add(styleStr.get(index));
stateStack.add(""+state);
index++;
}else if(styleStr.get(index).equals("+")){
state = 117;
styleStack.add(styleStr.get(index));
stateStack.add(""+state);
index++;
}else if(styleStr.get(index).equals("-")){
state = 118;
styleStack.add(styleStr.get(index));
stateStack.add(""+state);
index++;
}else{
jmp = false;
error_text.appendText(("Error info: case 52 " + stateStack.get(stateStack.size() - 1) + " " + styleStack.get(styleStack.size() - 1)));
}
break;
case 53:
String st4 = (String)styleStr.get(index);
if(styleStr.get(index).equals("*")){
state = 137;
styleStack.add(styleStr.get(index));
stateStack.add(""+state);
index++;
}else if(styleStr.get(index).equals("/")){
state = 138;
styleStack.add(styleStr.get(index));
stateStack.add(""+state);
index++;
}else if(st4.equals(";")||st4.equals("to")||st4.equals(")")||st4.equals("+")||st4.equals("-")||st4.equals(">")||st4.equals(">=")||
st4.equals("<")||st4.equals("<=")||st4.equals("==")||st4.equals("!=")||st4.equals("&&")||st4.equals("||")||programStr.get(index).equals("to")){
/****************************/
/********T --> V 的规约********/
/********或者 E-->V************/
/****************************/
styleStack.remove(styleStack.size() - 1);
stateStack.remove(stateStack.size() - 1);
/**************************************/
String t1 = (String)styleStr.get(index - 2);
String t2 = (String)styleStr.get(index);
if(t1.equals("=") && !t2.equals("*") && !t2.equals("/")){
styleStack.add("E");
stateStack.add(""+gotoState(Integer.parseInt((String)stateStack.get(stateStack.size() - 1)) ,"E"));
}else {
styleStack.add("T");
stateStack.add(""+gotoState(Integer.parseInt((String)stateStack.get(stateStack.size() - 1)) ,"T"));
}
state = Integer.parseInt(((String)stateStack.get(stateStack.size() - 1)));
}else{
jmp = false;
error_text.appendText(("Error info: case 53 " + stateStack.get(stateStack.size() - 1) + " " + styleStack.get(styleStack.size() - 1)));
}
break;
case 54:
if(styleStr.get(index).equals("(")){
state = 54;
styleStack.add(styleStr.get(index));
stateStack.add(""+state);
index++;
}else if(styleStr.get(index).equals("C")){
state = 55;
styleStack.add(styleStr.get(index));
stateStack.add(""+state);
index++;
}else if(styleStr.get(index).equals("K")){
state = 56;
styleStack.add(styleStr.get(index));
stateStack.add(""+state);
index++;
}else{
jmp = false;
error_text.appendText(("Error info: case 54 " + stateStack.get(stateStack.size() - 1) + " " + styleStack.get(styleStack.size() - 1)));
}
break;
case 55:
String st5 = (String)styleStr.get(index);
if(st5.equals(";")||st5.equals("}")||st5.equals("+")||st5.equals("-")||st5.equals("*")||st5.equals("/")||st5.equals(">")||
st5.equals(">=")||st5.equals("<")||st5.equals("<=")||st5.equals("==")||st5.equals("!=")||st5.equals("&&")||st5.equals("||")||
st5.equals(")")||programStr.get(index).equals("to")){
/*********V --> K 规约*********/
/****************************/
styleStack.remove(styleStack.size() - 1);
stateStack.remove(stateStack.size() - 1);
styleStack.add("V");
stateStack.add(""+gotoState(Integer.parseInt((String)stateStack.get(stateStack.size() - 1)) ,"V"));
state = Integer.parseInt(((String)stateStack.get(stateStack.size() - 1)));
}else{
jmp = false;
error_text.appendText(("Error info: case 56 " + stateStack.get(stateStack.size() - 1) + " " + styleStack.get(styleStack.size() - 1)));
}
break;
case 56:
String st6 = (String)styleStr.get(index);
if(st6.equals(";")||st6.equals("}")||st6.equals("+")||st6.equals("-")||st6.equals("*")||st6.equals("/")||st6.equals(">")||
st6.equals(">=")||st6.equals("<")||st6.equals("<=")||st6.equals("==")||st6.equals("!=")||st6.equals("&&")||st6.equals("||")||
st6.equals(")")||programStr.get(index).equals("to")){
/*********V --> K 规约*********/
styleStack.remove(styleStack.size() - 1);
stateStack.remove(stateStack.size() - 1);
styleStack.add("V");
stateStack.add(""+gotoState(Integer.parseInt((String)stateStack.get(stateStack.size() - 1)) ,"V"));
state = Integer.parseInt(((String)stateStack.get(stateStack.size() - 1)));
}else{
jmp = false;
error_text.appendText(("Error info: case 56 " + stateStack.get(stateStack.size() - 1) + " " + styleStack.get(styleStack.size() - 1)));
}
break;
case 57:
/***************************************/
if(styleStr.get(index).equals(";")){
state = 144;
styleStack.add(styleStr.get(index));
stateStack.add(""+state);
index++;
}else if(styleStr.get(index).equals("+")){
state = 117;
styleStack.add(styleStr.get(index));
stateStack.add(""+state);
index++;
}else if(styleStr.get(index).equals("-")){
state = 118;
styleStack.add(styleStr.get(index));
stateStack.add(""+state);
index++;
}else{
jmp = false;
error_text.appendText(("Error info: case 57 " + stateStack.get(stateStack.size() - 1) + " " + styleStack.get(styleStack.size() - 1)));
}
break;
case 58:
if(styleStr.get(index).equals("=")){
state = 110;
styleStack.add(styleStr.get(index));
stateStack.add(""+state);
index++;
}else if(styleStr.get(index).equals("[")){
state = 111;
styleStack.add(styleStr.get(index));
stateStack.add(""+state);
index++;
}else if(styleStr.get(index).equals(";")){
state = 143;
styleStack.add(styleStr.get(index));
stateStack.add(""+state);
index++;
}else{
jmp = false;
error_text.appendText(("Error info: case 58 " + stateStack.get(stateStack.size() - 1) + " " + styleStack.get(styleStack.size() - 1)));
}
break;
case 59:
if(styleStr.get(index).equals("=")){
state = 70;
styleStack.add(styleStr.get(index));
stateStack.add(""+state);
index++;
}else{
jmp = false;
error_text.appendText(("Error info: case 59 " + stateStack.get(stateStack.size() - 1) + " " + styleStack.get(styleStack.size() - 1)));
}
break;
case 60:
if(styleStr.get(index).equals(")")){
state = 71;
styleStack.add(styleStr.get(index));
stateStack.add(""+state);
index++;
}else{
jmp = false;
error_text.appendText(("Error info: case 60 " + stateStack.get(stateStack.size() - 1) + " " + styleStack.get(styleStack.size() - 1)));
}
break;
case 61:
if(styleStr.get(index).equals(">")){
state = 119;
styleStack.add(styleStr.get(index));
stateStack.add(""+state);
index++;
}else if(styleStr.get(index).equals(">=")){
state = 120;
styleStack.add(styleStr.get(index));
stateStack.add(""+state);
index++;
}else if(styleStr.get(index).equals("<")){
state = 121;
styleStack.add(styleStr.get(index));
stateStack.add(""+state);
index++;
}else if(styleStr.get(index).equals("<=")){
state = 122;
styleStack.add(styleStr.get(index));
stateStack.add(""+state);
index++;
}else if(styleStr.get(index).equals("==")){
state = 123;
styleStack.add(styleStr.get(index));
stateStack.add(""+state);
index++;
}else if(styleStr.get(index).equals("!=")){
state = 124;
styleStack.add(styleStr.get(index));
stateStack.add(""+state);
index++;
}else if(styleStr.get(index).equals("&&")){
state = 125;
styleStack.add(styleStr.get(index));
stateStack.add(""+state);
index++;
}else if(styleStr.get(index).equals("||")){
state = 126;
styleStack.add(styleStr.get(index));
stateStack.add(""+state);
index++;
}else if(styleStr.get(index).equals("+")){
state = 117;
styleStack.add(styleStr.get(index));
stateStack.add(""+state);
index++;
}else if(styleStr.get(index).equals("-")){
state = 118;
styleStack.add(styleStr.get(index));
stateStack.add(""+state);
index++;
}else{
jmp = false;
error_text.appendText(("Error info: case 61" + stateStack.get(stateStack.size() - 1) + " " + styleStack.get(styleStack.size() - 1)));
}
break;
case 63:
if(styleStr.get(index).equals("=")){
state = 72;
styleStack.add(styleStr.get(index));
stateStack.add(""+state);
index++;
}else{
jmp = false;
error_text.appendText(("Error info: case 63" + stateStack.get(stateStack.size() - 1) + " " + styleStack.get(styleStack.size() - 1)));
}
break;
case 64:
if(styleStr.get(index).equals("}")){
state = 73;
styleStack.add(styleStr.get(index));
stateStack.add(""+state);
index++;
}else{
jmp = false;
error_text.appendText(("Error info: case 64" + stateStack.get(stateStack.size() - 1) + " " + styleStack.get(styleStack.size() - 1)));
}
break;
case 65:
if(styleStr.get(index).equals(")")){
state = 74;
styleStack.add(styleStr.get(index));
stateStack.add(""+state);
index++;
}else{
jmp = false;
error_text.appendText(("Error info: case 65" + stateStack.get(stateStack.size() - 1) + " " + styleStack.get(styleStack.size() - 1)));
}
break;
case 66:
if(styleStr.get(index).equals(")")){
state = 75;
styleStack.add(styleStr.get(index));
stateStack.add(""+state);
index++;
}else{
jmp = false;
error_text.appendText(("Error info: case 66" + stateStack.get(stateStack.size() - 1) + " " + styleStack.get(styleStack.size() - 1)));
}
break;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?