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 规则,即 eCe
  • E() 函数:判断输入字符串是否符合 E 规则,即 e

本程序展示了递归下降分析算法的基本实现方法,可以用于对各种文法的识别。

Java 递归下降分析程序 - 文法识别

原文地址: https://www.cveoy.top/t/topic/oPQt 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录