以Sample语言为例,对于给定的文法G[E]
E->TX
X->+TX | ε;
T->FY;
Y->*FY | ε;
F->(E) | i
采用递归下降语法分析法编写语法分析程序,该语法分析程序判断输入的字符串是否符合上述文法,并能够输出相应的结果(是语法成分或不是语法成分)。
具体实现方式如下(java实现)。
/**
*
* @author Sun
*
*/
public class GradientDecsent {
private static String str;
private static int index;
private static String newStr;
public static void main(String[] ars) {
@SuppressWarnings("resource")
Scanner input = new Scanner(System.in);
System.out.println("请输入算数表达式:");
str = input.nextLine();
newStr = str + "#";
E();
System.out.println("正确语句!");
}
public static void E() {
T();
X();
}
public static void X() {
if (newStr.charAt(index) == '+') {
index++;
T();
X();
}
}
public static void T() {
F();
Y();
}
public static void Y() {
if (newStr.charAt(index) == '*') {
index++;
F();
Y();
}
}
public static void F() {
if (Character.isDigit(newStr.charAt(index)) || Character.isLetter(newStr.charAt(index))) {
index++;
} else if (newStr.charAt(index) == '(') {
index++;
E();
if (newStr.charAt(index) == ')') {
index++;
} else {
System.out.println("分析失败!\n");
System.exit(0);
}
} else {
System.out.println("分析失败!\n");
System.exit(0);
}
}
}