📄 expression.java
字号:
package midLanguage;
import java.util.*;
public class expression{
operator[] op;
Stack A;
Stack B;
String source; //原算式
public expression(){
op = new operator[5];
op[0] = new operator('@',0);
op[1] = new operator('+',0);
op[2] = new operator('-',0);
op[3] = new operator('*',1);
op[4] = new operator('/',1);
A = new Stack();
B = new Stack();
B.push(new Character('@'));
}
public int indexOf(Character ch){
int i=0,result = -1;
for(i=0;i<op.length;i++){
if(op[i].oper == ch.charValue()){
result = i;
break;
}
}
return result;
}
public int indexOf(char ch){
int i=0,result = -1;
for(i=0;i<op.length;i++){
if(op[i].oper == ch){
result = i;
break;
}
}
return result;
}
public void formLanguage(int loop){
A.push(B.pop());
}
public void getLanguage(String source){
char[] source_Array = source.toCharArray(); //原算式字符数组
int pointer = 0;
int index;
int loop=1; //纪录调用formLanguage()方法次数
while(!(((Character)B.peek()).charValue()=='@'&& source_Array[pointer]=='#'))
{
index = indexOf((Character)B.peek());
if(index !=-1)
{ //操作符
if(index == 0){//@
if(Character.isLetter(source_Array[pointer])){
A.push(new Character(source_Array[pointer]));
pointer++;
}
else if(source_Array[pointer] == '('){
B.push(new Character('@'));
pointer++;
}
else if(indexOf(source_Array[pointer])!=-1){
B.push(new Character(source_Array[pointer]));
pointer++;
}
else if(source_Array[pointer] == ')'){
B.pop();
pointer++;
}
else{
System.out.println("error input!");
break;
}
}
else{
int index2 = indexOf(source_Array[pointer]);
if(Character.isLetter(source_Array[pointer])){
A.push(new Character(source_Array[pointer]));
pointer++;
}
else if(source_Array[pointer] == '('){
B.push(new Character('@'));
pointer++;
}
else if(index2!=-1){
int result = operator.cmp(op[index],op[index2]);
if(result==1){
formLanguage(loop);
loop++;
//push(B.pop());
}
else if(result == 0){
B.push(new Character(source_Array[pointer]));
pointer++;
}
else{
System.out.println("error state!");
break;
}
}
else if(source_Array[pointer] == ')'){
formLanguage(loop);
loop++;
//A.push(B.pop());
}
else if(source_Array[pointer] == '#'){
formLanguage(loop);
loop++;
//A.push(B.pop());
}
else{
System.out.println("error state!");
break;
}
}
}
else{
System.out.println("error state!");
break;
}
} //end of while
print();
}
public void print(){
Stack temp_stack = new Stack();
int temp = A.size();
for(int p=0;p<temp;p++)
temp_stack.push(A.pop());
for(int q=0;q<temp;q++)
System.out.print(((Character)temp_stack.pop()).charValue());}
}//end of class nbl
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -