Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何实现可识别注释的DFA?_Java_Dfa - Fatal编程技术网

Java 如何实现可识别注释的DFA?

Java 如何实现可识别注释的DFA?,java,dfa,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 =

我需要一些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;
}
公共静态布尔扫描(字符串s){
int i=0,state=0;
而(i=0){
最终字符ch=s.charAt(i++);
开关(状态){
案例0:
如果(ch=='/')
状态=1;
其他的
状态=-1;
打破
案例1:
如果(ch=='*')
状态=2;
其他的
状态=-1;
打破
案例2:
如果(ch='a')
状态=2;
else if(ch=='/'))
状态=3;
其他的
状态=-1;
打破
案例3:
如果(ch=='*')
状态=4;
其他的
状态=-1;
打破
案例4:
如果(ch='')
状态=4;
其他的
状态=-1;
打破
}
}
System.out.println(“状态:+状态”);
返回状态==4;
}
但是用最简单的输入
/**/
状态
变量是
-1
,而它应该是
4
。 我应该做哪些改变? 希望你们能帮我。。。
谢谢

在步骤3中,您的状态变为-1。那你怎么找到匹配的。 请参见此块:

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