我需要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
。
我应该进行哪些更改?
希望你们能帮助我...
谢谢
答案 0 :(得分:0)
在步骤3中,您的状态变为-1。然后如何匹配。 看到这个方块:
case 2:
if(ch == 'a')
state = 2;
else if(ch == '/')
state = 3;
else
state = -1;
break;
State 0
:char /
:nextState 1
State 1
:char *
:nextState 2
State 2
:char *
:nextState -1
State -1
:char /
:nextState -1