F'->*F'|ε P->(E)|a|b|∧
package com.hyh.recursive;
import java.util.Scanner;
/*
* 测试( a ) + b或者a * + b
*
*
*/
public class test2 {
private static int index = 0;
private static String[] string = new String[5];
static void E() {
// E ->TE’
T();
E1();
System.out.println("E-> TE’");
}
static void E1() {
// E’-> +E|ε
if (string[index].equals("+")) {
index++;
E();
System.out.println("E’-> +E");
}
}
static void T() {
// T ->FT’
F();
T1();
System.out.println("T-> FT’");
}
static void T1() {
// T' ->T|ε
T();
System.out.println("T'-> T");
}
static void F() {
// F ->PF'
P();
F1();
System.out.println("F-> PF'");
}
static void F1() {
//F' ->*F'|ε
if (string[index].equals("*")) {
index++;
F1();
System.out.println("F’-> *F'");
}
}
static void P() {
//P ->(E)|a|b|^
if (string[index].equals("a")) {
index++;
System.out.println("F-> a");
} else if(string[index].equals("b")) {
index++;
System.out.println("F-> b");
}else if(string[index].equals("^")) {
index++;
System.out.println("F-> ^");
}else if (string[index].equals("(")) {
index++;
E();
if (string[index].equals(")")) {
index++;
System.out.println("F->(E)");
} else {
System.out.println("分析失败");
}
} else {
System.out.println("分析失败");
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//System.out.println("请输入算数表达式");
while (!sc.equals("----")) {
System.out.println("请输入算数表达式");
string[4] = "#";
for (int i = 0; i < 4; i++) {
string[i] = sc.next();
try {
if (string[i].matches("^(-?\\d+)(\\.\\d+)?$")) {
string[i] = "i";
} else if (string[i].matches("^-?\\d+$")) {
string[i] = "i";
}
} catch (Exception e) {
}
}
E();
System.out.println("正确语句");
//string.notifyAll();
}
}
}
这个双递归?是作业还是课题?写是没问题的,但是否能收敛?