📄 yufafenxi.java
字号:
package yufafenxi;
import cifafenxi.word;
public class yufafenxi {
private String[][] key = new String[1000][2];
private int num = 0;
private int curr = 0;
private int wrong = 1;
private int row = 1;
private boolean bool = true;
// private String season;
private String xx;
public void fenxi(String aFile,String bFile) {
word a = new word();
a.analysis(aFile);
num = a.getK();
for (int i = 0; i < num; i++) {
key[i][0] = a.result[i][0];
key[i][1] = a.result[i][1];
}
run();
}
/* 语法分析流程 */
public void run() {
try {
if (Integer.parseInt(key[curr][0]) == 10) {
boolean yn = doWhile();
if (!yn) {
System.out.println("语法错误,错误位置为第" + row + "句第" + wrong
+ "个单词");
findNext();
} else
System.out.println("While-do 循环语句,嵌套赋值语句");
wrong = 1;
} else if (Integer.parseInt(key[curr][0]) == 6) {
boolean yn = branch();
if (!yn) {
System.out.println("语法错误,错误位置为第" + row + "句第" + wrong
+ "个单词");
findNext();
} else
System.out.println(xx);
wrong = 1;
} else if (Integer.parseInt(key[curr][0]) == 11) {
boolean yn = setValue();
if (!yn) {
System.out.println("语法错误,错误位置为第" + row + "句第" + wrong
+ "个单词");
findNext();
} else
System.out.println("赋值语句");
wrong = 1;
} else {
findNext();
}
bool = true;
if (curr < num) {
run();
}
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
System.out.println("必须以分号结尾");
}
}
/* 以上是语法分析器的分析过程 */
private boolean doWhile() {
boolean yn;
curr++;
wrong++;
isBool();
if (Integer.parseInt(key[curr][0]) == 9) {
curr++;
wrong++;
if (setValue()) {
yn = true;
} else
yn = false;
} else
yn = false;
return yn;
}
/* 循环语句的判断 */
private boolean branch() {
boolean yn;
curr++;
wrong++;
if (isBool()) {
if (Integer.parseInt(key[curr][0]) == 7) {
curr++;
wrong++;
if (setValue()) {
if (Integer.parseInt(key[curr][0]) == 21) {
yn = true;
xx = "If-then分支语句,嵌套赋值语句";
} else if (Integer.parseInt(key[curr][0]) == 8) {
curr++;
wrong++;
if (setValue()) {
if (Integer.parseInt(key[curr][0]) == 21) {
yn = true;
xx = "If-then-else分支语句,嵌套赋值语句";
} else
yn = false;
} else
yn = false;
} else
yn = false;
} else
yn = false;
} else {
yn = false;
}
} else
yn = false;
return yn;
}
/* 分支语句的判断 */
private boolean setValue() {
boolean yn;
if (Integer.parseInt(key[curr][0]) == 11) {
curr++;
wrong++;
}
if (Integer.parseInt(key[curr][0]) == 23) {
curr++;
wrong++;
if (expression()
&& (Integer.parseInt(key[curr][0]) == 21 || Integer
.parseInt(key[curr][0]) == 8)) {
yn = true;
} else {
yn = false;
}
} else {
yn = false;
}
return yn;
}
/* 复制语句的判断 */
private void findNext() {
if (curr < num)
while (Integer.parseInt(key[curr][0]) != 21)
curr++;
wrong = 1;
row++;
curr++;
}
/* 查找下一个句子 */
private boolean isBool() {
boolean yn;
if (Integer.parseInt(key[curr][0]) == 11
| Integer.parseInt(key[curr][0]) == 12) {
curr++;
wrong++;
yn = true;
} // System.out.println("..........."+key[curr][1]);}
else
yn = false;
return yn;
}
/* 判断是否为变量或者常量 */
private boolean expression() {
if (Integer.parseInt(key[curr][0]) == 15) {
curr++;
wrong++;
expression();
if (Integer.parseInt(key[curr][0]) == 16) {
curr++;
wrong++;
if (Integer.parseInt(key[curr][0]) != 21
&& Integer.parseInt(key[curr][0]) != 16
&& Integer.parseInt(key[curr][0]) != 11
&& Integer.parseInt(key[curr][0]) != 12) {
goOn();
}
}
else {
bool = false;
}
} else if (Integer.parseInt(key[curr][0]) == 11
|| Integer.parseInt(key[curr][0]) == 12) {
curr++;
wrong++;
goOn();
} else
bool = false;
return bool;
}
/*表达式的判断*/
private void goOn() {
if (Integer.parseInt(key[curr][0]) == 13
| Integer.parseInt(key[curr][0]) == 14
| Integer.parseInt(key[curr][0]) == 24
| Integer.parseInt(key[curr][0]) == 25) {
curr++;
wrong++;
expression();
}
}
/*表达式判断中的一个子程序*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -