📄 grammar.java
字号:
private void d1() {
Vector characterVector = new Vector();
String rules[] = d1.rules;
String temp = null;
String nextElement = null;
int tempPoint = currentPoint;
for (int i = 0; i < rules.length; i++) {
characterVector.clear();
temp = rules[i];
tokenizer = new StringTokenizer(temp, " ");
while (tokenizer.hasMoreElements()) {
nextElement = (String) tokenizer.nextElement();
characterVector.addElement(nextElement);
}
for (int j = 0; j < characterVector.size(); j++) {
temp = (String) characterVector.elementAt(j);
tempToken = (Token) wordVector.elementAt(currentPoint);
currentString = tempToken.getValue();
tempString = currentString;
System.out.println(temp);
System.out.println(currentString);
type = tempToken.getType();
if ((type == 1) || (type == 3)) {
currentString = "i";
}
if (isTerminal(temp)) {
if (temp.equals(currentString)) {
currentPoint++;
isRight = true;
if (currentString.equals("for")) {
midcode = "BEGIN";
midcodeVector.addElement(midcode);
}
if (isAssign == true) {
assignVector.addElement(tempString);
}
if (currentString.equals(";") && (isAssign == true)) {
isAssign = false;
// assignVector.addElement(currentChar);
}
if (isExpression == true) {
expressionVector.addElement(tempString);
}
if (currentString.equals(";") && (isExpression == true)) {
isExpression = false;
// expressionVector.addElement(currentChar);
}
if (currentPoint >= maxPoint) {
return;
}
continue;
} else {
currentPoint = tempPoint;
isRight = false;
break;
}
} else {
char c = temp.charAt(0);
switch (c) {
case 'E':
e();
break;
case 'D':
d1();
break;
case '$':
break;
}
}
}
}
}
private void f() {
Vector characterVector = new Vector();
String rules[] = f.rules;
String temp = null;
String nextElement = null;
// int tempPoint=currentPoint;
for (int i = 0; i < rules.length; i++) {
characterVector.clear();
temp = rules[i];
tokenizer = new StringTokenizer(temp, " ");
while (tokenizer.hasMoreElements()) {
nextElement = (String) tokenizer.nextElement();
characterVector.addElement(nextElement);
}
for (int j = 0; j < characterVector.size(); j++) {
temp = (String) characterVector.elementAt(j);
char c = temp.charAt(0);
switch (c) {
case 'G':
g();
break;
case 'F':
f1();
break;
}
}
}
}
private void e1() {
Vector characterVector = new Vector();
String rules[] = e1.rules;
String temp = null;
String nextElement = null;
int tempPoint = currentPoint;
for (int i = 0; i < rules.length; i++) {
characterVector.clear();
temp = rules[i];
tokenizer = new StringTokenizer(temp, " ");
while (tokenizer.hasMoreElements()) {
nextElement = (String) tokenizer.nextElement();
characterVector.addElement(nextElement);
}
for (int j = 0; j < characterVector.size(); j++) {
temp = (String) characterVector.elementAt(j);
tempToken = (Token) wordVector.elementAt(currentPoint);
currentString = tempToken.getValue();
tempString = currentString;
System.out.println(temp);
System.out.println(currentString);
type = tempToken.getType();
if ((type == 1) || (type == 3)) {
currentString = "i";
}
if (isTerminal(temp)) {
if (temp.equals(currentString)) {
currentPoint++;
isRight = true;
if (currentString.equals("for")) {
midcode = "BEGIN";
midcodeVector.addElement(midcode);
}
if (isAssign == true) {
assignVector.addElement(tempString);
}
if (currentString.equals(";") && (isAssign == true)) {
isAssign = false;
// assignVector.addElement(currentChar);
}
if (isExpression == true) {
expressionVector.addElement(tempString);
}
if (currentString.equals(";") && (isExpression == true)) {
isExpression = false;
// expressionVector.addElement(currentChar);
}
if (currentPoint >= maxPoint) {
return;
}
continue;
} else {
currentPoint = tempPoint;
isRight = false;
break;
}
} else {
char c = temp.charAt(0);
switch (c) {
case 'F':
f();
break;
case 'E':
e1();
break;
case '$':
break;
}
}
}
}
}
private void g() {
Vector characterVector = new Vector();
String rules[] = g.rules;
String temp = null;
String nextElement = null;
int tempPoint = currentPoint;
for (int i = 0; i < rules.length; i++) {
characterVector.clear();
temp = rules[i];
tokenizer = new StringTokenizer(temp, " ");
while (tokenizer.hasMoreElements()) {
nextElement = (String) tokenizer.nextElement();
characterVector.addElement(nextElement);
}
for (int j = 0; j < characterVector.size(); j++) {
temp = (String) characterVector.elementAt(j);
tempToken = (Token) wordVector.elementAt(currentPoint);
currentString = tempToken.getValue();
tempString = currentString;
System.out.println(temp);
System.out.println(currentString);
type = tempToken.getType();
if ((type == 1) || (type == 3)) {
currentString = "i";
}
if (isTerminal(temp)) {
if (temp.equals(currentString)) {
currentPoint++;
isRight = true;
if (currentString.equals("for")) {
midcode = "BEGIN";
midcodeVector.addElement(midcode);
}
if (isAssign == true) {
assignVector.addElement(tempString);
}
if (currentString.equals(";") && (isAssign == true)) {
isAssign = false;
// assignVector.addElement(currentChar);
}
if (isExpression == true) {
expressionVector.addElement(tempString);
}
if (currentString.equals(";") && (isExpression == true)) {
isExpression = false;
// expressionVector.addElement(currentChar);
}
if (currentPoint >= maxPoint) {
return;
}
if (currentString.equals("i")) {
return;
}
} else {
currentPoint = tempPoint;
isRight = false;
break;
}
} else {
char c = temp.charAt(0);
switch (c) {
case 'C':
c();
break;
}
}
}
}
}
private void f1() {
Vector characterVector = new Vector();
String rules[] = f1.rules;
String temp = null;
String nextElement = null;
int tempPoint = currentPoint;
for (int i = 0; i < rules.length; i++) {
characterVector.clear();
temp = rules[i];
tokenizer = new StringTokenizer(temp, " ");
while (tokenizer.hasMoreElements()) {
nextElement = (String) tokenizer.nextElement();
characterVector.addElement(nextElement);
}
for (int j = 0; j < characterVector.size(); j++) {
temp = (String) characterVector.elementAt(j);
tempToken = (Token) wordVector.elementAt(currentPoint);
currentString = tempToken.getValue();
tempString = currentString;
System.out.println(temp);
System.out.println(currentString);
type = tempToken.getType();
if ((type == 1) || (type == 3)) {
currentString = "i";
}
if (isTerminal(temp)) {
if (temp.equals(currentString)) {
currentPoint++;
isRight = true;
if (currentString.equals("for")) {
midcode = "BEGIN";
midcodeVector.addElement(midcode);
}
if (isAssign == true) {
assignVector.addElement(tempString);
}
if (currentString.equals(";") && (isAssign == true)) {
isAssign = false;
// assignVector.addElement(currentChar);
}
if (isExpression == true) {
expressionVector.addElement(tempString);
}
if (currentString.equals(";") && (isExpression == true)) {
isExpression = false;
// expressionVector.addElement(currentChar);
}
if (currentPoint >= maxPoint) {
return;
}
continue;
} else {
currentPoint = tempPoint;
isRight = false;
break;
}
} else {
char c = temp.charAt(0);
switch (c) {
case 'G':
d();
break;
case 'F':
f1();
break;
case '$':
break;
}
}
}
}
}
private void h() {
c();
}
private void i() {
Vector characterVector = new Vector();
String rules[] = i.rules;
String temp = null;
String nextElement = null;
int tempPoint = currentPoint;
for (int i = 0; i < rules.length; i++) {
characterVector.clear();
temp = rules[i];
tokenizer = new StringTokenizer(temp, " ");
while (tokenizer.hasMoreElements()) {
nextElement = (String) tokenizer.nextElement();
characterVector.addElement(nextElement);
}
for (int j = 0; j < operator.length; j++) {
if (currentString.equals(operator[j])) {
currentPoint++;
isRight = true;
expressionVector.addElement(currentString);
if (currentPoint >= maxPoint) {
return;
}
return;
}
}
currentPoint = tempPoint;
isRight = false;
}
}
private void j() {
c();
}
private boolean isTerminal(String s) {
for (int i = 0; i < terminal.length; i++) {
if (terminal[i].equals(s)) {
return true;
}
}
return false;
}
private void assignProcess(Vector vector) {
isAssignProcessed = true;
String leftResult = (String) vector.elementAt(0);
vector.removeElementAt(0);
String assignOpe = (String) vector.elementAt(0);
vector.removeElementAt(0);
String rightResult = "";
String midcode = "";
if (vector.size() <= 2) {
rightResult = (String) vector.elementAt(0);
} else {
expressionProcess(vector);
rightResult = (String) operandStack.peek();
}
//midcode = assignOpe + "" + '\t' + "" + leftResult + "" + '\t' + "\\"
//+ '\t' + "" + rightResult;
midcode=leftResult+":="+rightResult;
//midcode = "(" + midcode + ")";
System.out.println(midcode);
midcodeVector.addElement(midcode);
}
private void expressionProcess(Vector vector) {
operandStack.clear();
operatorStack.clear();
operatorStack.addElement(";");
String currentChar = "";
String number1 = "", number2 = "", ope = "";
String midcode = "";
int i = 0;
currentChar = (String) vector.elementAt(i++);
while (!currentChar.equals(";") || !operatorStack.peek().equals(";")) {
if (!isOperator(currentChar)) {
operandStack.addElement(currentChar);
currentChar = (String) vector.elementAt(i++);
} else {
switch (precede((String) operatorStack.peek(), currentChar)) {
case '<':
operatorStack.addElement(currentChar);
currentChar = (String) vector.elementAt(i++);
break;
case '=':
operatorStack.pop();
currentChar = (String) vector.elementAt(i++);
break;
case '>':
ope = (String) operatorStack.pop();
number2 = (String) operandStack.pop();
number1 = (String) operandStack.pop();
operandStack.addElement((String) midResult.lastElement());
//midcode = ope + "" + '\t' + "" + number1 + "" + '\t' + ""
//+ number2 + "" + '\t' + "" + operandStack.peek();
midcode=operandStack.peek()+":="+number1+""+ope+""+number2;
//midcode = "(" + midcode + ")";
System.out.println(midcode);
midcodeVector.addElement(midcode);
midResult.addElement("T" + midResult.size());
break;
}
}
}
}
private char precede(String operator1, String operator2) {
int temp1 = 0, temp2 = 0;
for (int i = 0; i < assignOperator.length; i++) {
if (operator1.equals(assignOperator[i])) {
temp1 = i;
}
if (operator2.equals(assignOperator[i])) {
temp2 = i;
}
}
return priority[temp1][temp2];
}
private boolean isOperator(String s) {
for (int i = 0; i < operator1.length; i++) {
if (s.equals(operator1[i])) {
return true;
}
}
return false;
}
private void conditionProcess(Vector vector) {
isExpressionProcessed = true;
int length = vector.size();
Vector leftVector = new Vector();
Vector rightVector = new Vector();
String expressionOpe = "";
String leftResult = null, rightResult = null;
String midcode = "";
int i = 0;
for (i = 0; i < length; i++) {
if (isExpressionOperator((String) vector.elementAt(i))) {
expressionOpe = (String) vector.elementAt(i);
i++;
break;
} else {
leftVector.addElement(vector.elementAt(i));
}
}
leftVector.addElement(";");
for (; i < length; i++) {
rightVector.addElement(vector.elementAt(i));
}
rightVector.addElement(";");
if (leftVector.size() <= 2) {
leftResult = (String) leftVector.elementAt(0);
} else {
expressionProcess(leftVector);
leftResult = (String) operandStack.peek();
}
if (rightVector.size() <= 2) {
rightResult = (String) rightVector.elementAt(0);
} else {
expressionProcess(rightVector);
rightResult = (String) operandStack.peek();
}
//midcode = expressionOpe + "" + '\t' + "" + leftResult + "" + '\t' + ""
//+ rightResult + '\t' + "" + midResult.lastElement();
//midcode = "(" + midcode + ")";
midcode=midResult.lastElement()+":="+leftResult+expressionOpe+rightResult;
System.out.println(midcode);
midcodeVector.addElement(midcode);
//expressionOpe = "JNP";
leftResult = (String) midResult.lastElement();
//length = midcodeVector.size();
//i=midcodeVector.size()-1;
//midcode = expressionOpe + "" + '\t' + "" + leftResult + "" + '\t'
//+ "\\" + '\t' ;
//midcode = "(" + midcode ;
midcode="if ("+leftResult+")"+" "+"goto ";
midcodeVector.addElement(midcode);
midcode="goto ";
midcodeVector.addElement(midcode);
midResult.addElement("T" + midResult.size());
}
private boolean isExpressionOperator(String s) {
for (int i = 0; i < operator.length; i++) {
if (s.equals(operator[i])) {
return true;
}
}
return false;
}
private void output(){
File file =new File("output.txt");
BufferedWriter bw=null;
int length=midcodeVector.size();
String lineSeparator=System.getProperty("line.separator");
String temp="";
if(file.exists()){
file.delete();
try {
file.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else{
try {
file.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
try {
bw=new BufferedWriter(new FileWriter(file));
for(int i=0;i<length;i++){
temp=(String)midcodeVector.elementAt(i);
temp=""+i+": "+temp;
bw.write(temp);
bw.write(lineSeparator);
}
bw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -