Java 如何实现可识别注释的DFA?
我需要一些Java方面的帮助。。。 我必须在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注释。
为了从简单的事情开始,假设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