Java 模拟DFA(有穷自动机)的执行过程

上编译原理老师出的一道题:判断字符能否被有穷自动机接收

在这里插入图片描述

/**
 * 测试类
 * @Author: 东方老赢
 * @Date: 2020/3/25 14:40
 */
public class Test {
    public static void main(String[] args) {
        //矩阵
        int[][] matrix = new int[][]{{2,1,-1,-1},{3,1,-1,-1},{-1,5,2,4},{-1,6,2,4},{3,1,-1,-1},{-1,5,-1,-1},{-1,5,-1,-1}};
        //终结集
        int[] ends = new int[]{4,5,6};
        //测试字符
        String a = "ad";
        DFADemo dfaDemo = new DFADemo();
        System.out.println(dfaDemo.getResult(ends,matrix,a));
    }
}
/**
 * DFA类
 * @Author: 东方老赢
 * @Date: 2020/3/25 12:59
 */
public class DFADemo {
    char[] arr = new char[]{'a','b','c','d'};
    private int[][] matrix;
    private int[] ends;
    private int start,end;
    private String str;

    public DFADemo(){

    }
    //最终结果
    public boolean getResult(int[] ends,int[][] matrix,String str){
        for (int i = 0; i < ends.length; i++) {
            this.ends = ends;
            this.matrix = matrix;
            this.str = str;
            start = 0;
            end = ends[i];
            boolean b = result(str);
            if (b == true){
                return b;
            }
        }
        return false;
    }

    public boolean result(String str){
        //将字符串存成数组
        char[] strs = new char[str.length()];
        for (int i = 0; i < str.length(); i++) {
            strs[i] = str.charAt(i);
        }
        //遍历数组
        int a = start;
        for (int i = 0; i < strs.length&&a!=-1; i++) {
                int next = Getnext(a,strs[i]);
                a = next;
        }
        //判断结果
        if (a != -1 && a==end){
            return true;
        }else {
            return false;
        }
    }
    //遍历matrix的第a行
    private int Getnext(int a, char str) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == str){
                if (matrix[a][i] != -1){
                    return matrix[a][i];
                }
            }
        }
       return -1;
    }
}
发布了23 篇原创文章 · 获赞 5 · 访问量 1140

猜你喜欢

转载自blog.csdn.net/qq_40181435/article/details/105098100