首页 > 解决方案 > 如何实现识别评论的 DFA?

问题描述

我需要一些关于 Java 的帮助......我必须在 Java 中实现一个 DFA,它可以识别/*和之间包含的 Java 注释*/。为了从简单的事情开始,假设 DFA 的字母表是:{'/', '*', 'a'},所以它只识别这 3 个元素。可能接受的字符串:

1)/**/

2) /****/ 3) /*a*a**/ 4)/*a**/

它不会接受:

1)/*/

2)/**/***/

为了实现这一点,我开发了这种方法:

    public static boolean scan(String s){
    int i = 0, state = 0;
    while(i < s.length() && stato >= 0){
        final char ch = s.charAt(i++);
        switch(state){
            case 0:
                if(ch == '/')
                    state = 1;
                else 
                    state = -1;
                break;
            case 1: 
                if(ch == '*')
                    state = 2;
                else 
                    state = -1;
                break;
            case 2: 
                if(ch == 'a')
                    state = 2;
                else if(ch == '/')
                    state = 3;
                else 
                    state = -1;
                break;
            case 3: 
                if(ch == '*')
                    state = 4;
                else 
                    state = -1;
                break;
            case 4:
                if(ch == ' ')
                    state = 4;
                else
                    state = -1;
                break;
        }
    }
    System.out.println("State: " + state);
    return state == 4;
}

但是用最简单的输入/**/ status变量是-1,什么时候应该是4。我应该做出哪些改变?希望你们能帮助我...谢谢

标签: javadfa

解决方案


在第 3 步中,您的状态变为 -1。那么你如何得到匹配。看到这个块:

case 2: 
            if(ch == 'a')
                state = 2;
            else if(ch == '/')
                state = 3;
            else 
                state = -1;
            break;
  1. State 0 : char / :nextState 1
  2. State 1 : char * :nextState 2
  3. State 2 : char * :nextState -1
  4. State -1: char / :nextState -1

推荐阅读