谁能帮我写个下面文法的递归下降程序,用java实现,java作业中的一个问题,急啊,明天就要交了,求高手们

S::= SAS|(QS)| automautom=a|b|c|…|zA::=U|R|∨Q:: =가| X有会这个的吗
2025-04-04 19:38:57
推荐回答(2个)
回答1:

import java.util.Scanner;

public class LL1 {

private static String str;
private static int ptr,len,step;
private static boolean right;

public static boolean Advance() {
if (ptr < len - 1) {
ptr++;
pri("");
return true;
} else {
return false;
}
}

public static void pri(String s) {//输出推导过程
step++;
System.out.println(step + "\t" + str.charAt(ptr) + "\t" + s + "\t"
+ str.substring(ptr));
}

public static void E() {
pri("E->TG");
T();
G();
}

public static void G() {
if (str.charAt(ptr) == '+') {
pri("G->+TG");
if (!Advance()) {
return;
}
T();
G();
} else if (str.charAt(ptr) == '-') {
pri("G->-TG");
if (!Advance()) {
return;
}
T();
G();
} else {
pri("G->ε");
}
}

public static void T() {
pri("T->FS");
F();
S();
}

public static void S() {
if (str.charAt(ptr) == '*') {
pri("S->*FS");
if (!Advance()) {
return;
}
F();
S();
} else if (str.charAt(ptr) == '/') {
pri("S->/FS");
if (!Advance()) {
return;
}
F();
S();
} else {
pri("S->ε");
}
}

public static void F() {
if (str.charAt(ptr) == '(') {
pri("F->(E)");
if (!Advance()) {
return;
}
E();
if (str.charAt(ptr) == ')') {
if (!Advance()) {
return;
}
} else {
Error();
}
} else if (str.charAt(ptr) == 'i') {
pri("F->i");
if (!Advance()) {
return;
}
} else {
Error();
}
}

public static void Error() {
right = false;
pri("Error!");
if (!Advance()) {
return;
}
}

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
str = new String(sc.next());
ptr = step = 0;
right = true;
len = str.length();
System.out.println("步骤\t当前\t产生式\t输入串");
E();
if (right && ptr == len - 1) {
System.out.println(str + " is leagal!");
} else {
System.out.println(str + " is illeagal!");
}
}

}
过程差不多,仅供参考

回答2:

爱上对方地方v