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
变量是-1
,什么时候应该是4
。我应该做出哪些改变?希望你们能帮助我...谢谢
解决方案
在第 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
推荐阅读
- javascript - 如何将 Bootstrap 4 轮播与一组控件同步?
- python - 使用 numpy reshape((-1,1)) 的替代方法
- python - cython vs python numpy 用于(简单地)添加数组
- android - Retrofit2,调试和发布版本的不同行为
- json - 如何在firebase实时数据库中向大JSON对象添加另一个属性
- ios - 如何从 Firebase 数据库中删除特定的子值
- javascript - 我正在尝试使用 javascript 从 Web 解析 JSON,但它不起作用
- svg - 使用 RSelenium 和 XPath 查找 SVG 元素
- php - 如何将值转换为数组 PHP
- vue-cli - 使用 vue-cli 时,jointjs 中的自定义元素错误