如何实施可识别评论的DFA?

时间:2018-08-01 19:15:19

标签: java 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时,变量应为-14。 我应该进行哪些更改? 希望你们能帮助我... 谢谢

1 个答案:

答案 0 :(得分:0)

在步骤3中,您的状态变为-1。然后如何匹配。 看到这个方块:

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