Java 递归下降分析程序 - 文法识别
import java.util.Scanner;
public class Main {
private static String input;
private static int index;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
input = scanner.next();
index = 0;
if (G_A()) {
if (index == input.length()) {
System.out.println("Success");
} else {
System.out.println("Error");
}
} else {
System.out.println("Error");
}
}
private static boolean G_A() {
if (input.charAt(index) == 'i') {
index++;
if (B()) {
if (input.charAt(index) == '*') {
index++;
if (E()) {
return true;
}
}
}
}
return false;
}
private static boolean B() {
if (input.charAt(index) == 'S') {
index++;
if (B()) {
return true;
}
} else if (input.charAt(index) == '.') {
index++;
if (input.charAt(index) == 'i') {
index++;
if (C()) {
return true;
}
}
}
return false;
}
private static boolean C() {
if (E()) {
if (C()) {
return true;
}
} else {
return true;
}
return false;
}
private static boolean E() {
if (input.charAt(index) == 'e') {
index++;
return true;
}
return false;
}
}
本程序通过递归下降分析算法判断输入的单词序列是否符合给定的文法规则:
- G(A):A→iB*e
- B→SB|
- S→[eC]|.i
- C→eC|e
程序使用 Java 语言编写,输入格式为一个字符串,每个符号为一个单词,输出格式为“Success”或“Error”。
例如,输入 i.i*e,程序会输出 Success,因为该序列符合文法规则。而输入 i.i*,程序会输出 Error,因为该序列不符合文法规则。
程序说明:
- 程序使用递归函数分别对应文法规则中的每个非终结符,通过判断当前字符是否符合规则来进行匹配。
- 变量
index指示当前字符的位置,用于遍历输入字符串。 - 递归函数返回
true表示匹配成功,返回false表示匹配失败。 - 程序首先判断输入字符串是否符合
G_A规则,然后判断index是否等于输入字符串的长度,如果相等则表示匹配成功,否则表示匹配失败。
代码详解:
G_A()函数:判断输入字符串是否符合G_A规则,即iB*e。B()函数:判断输入字符串是否符合B规则,即SB或'.i。C()函数:判断输入字符串是否符合C规则,即eC或e。E()函数:判断输入字符串是否符合E规则,即e。
本程序展示了递归下降分析算法的基本实现方法,可以用于对各种文法的识别。
原文地址: https://www.cveoy.top/t/topic/oPQt 著作权归作者所有。请勿转载和采集!