设计一个有限状态机提取C语言文件中的注释(java版)
2014-10-10 15:47
441 查看
这是一道百度笔试题目:设计一个有限状态机提取C语言文件中的注释
这道题其实也是考了23种设计模式中状态模式
Java实现代码:
ps:上述情况,没考虑行注释和块注释嵌套的情况。
这道题其实也是考了23种设计模式中状态模式
Java实现代码:
import java.util.ArrayList; interface state{ void handle(context con); } class text implements state{ //文本状态 public void handle(context con){ if(con.getChar()=='/'){ con.setState(new slash()); } } } class slash implements state{ //有一个"/" public void handle(context con){ if(con.getChar()=='*'){ con.setState(new bc_comment()); //若再有一个“*”转到块注释(block)处理状态 }else if(con.getChar()=='/'){ con.setState(new ln_comment()); //若再有一个“/”转到行注释处理状态 }else{ con.setState(new text()); } } } class ln_comment implements state{ public void handle(context con){ if(con.getChar()=='\n'){ //行注释处理时遇到换行,返回文本状态 con.setState(new text()); }else{ System.out.println("//comment: "+con.getChar()); } } } class bc_comment implements state{ public static ArrayList<Character> ls=new ArrayList<Character>(); public void handle(context con){ if(con.getChar()=='*'){ con.setState(new start_comment()); }else{ con.setState(new bc_comment()); ls.add(con.getChar()); System.out.println("/* */comment:"+con.getChar()); } } } class start_comment implements state{ public void handle(context con){ if(con.getChar()=='/'){ con.setState(new text()); } } } class context{ public state s; public char ch; public context(state s){ this.s=s; } public void setChar(char ch){ this.ch=ch; } public void setState(state s){ this.s=s; } public char getChar(){ return this.ch; } public void handle(){ s.handle(this); } } public class stateDemo { public static void main(String args[]){ String str="s//najkknsa\na,a,,"; state sta=new text(); char[] ch=str.toCharArray(); context con=new context(sta); for(int j=0;j<str.length();j++){ con.setChar(ch[j]); con.handle(); } } }
ps:上述情况,没考虑行注释和块注释嵌套的情况。
相关文章推荐
- 用javadoc提取此注释文档,并产生一个HTML文件,最后通过浏览器查看结果 直接Tools>Generate javadoc
- 第七章:输入与输出,给定一个源代码文件(.cs, .java),输出该文件的总行数、空行数、注释行数、代码行数。
- 给定一个源代码文件(.cs, .java),输出该文件的总行数、空行数、注释行数、代码行数
- 给定一个源代码文件(.cs, .java),输出该文件的总行数、空行数、注释行数、代码行数
- 给定一个源代码文件(.cs, .java),输出该文件的总行数、空行数、注释行数、代码行数
- 给定一个源代码文件(.cs, .java),输出该文件的总行数、空行数、注释行数、代码行数
- 今天看到了一个用java实现复制,剪切,删除文件或文件夹的示例,感觉不错,欢迎学习(带详细注释)
- jmeter添加http请求、java请求,将返回的json数据提取出来并将结果追加到一个文件
- 【代码提取】提取一个文件夹里面的所有Java文件的类名函数名和变量名
- 给定一个源代码文件(.cs, .java),输出该文件的总行数、空行数、注释行数、代码行数
- 给定一个源代码文件(.cs, .java),输出该文件的总行数、空行数、注释行数、代码行数
- 挺激动的,琢磨了不久(目标1:给定一个源代码文件(.cs, .java),输出该文件的总行数、空行数、注释行数、代码行数)
- java swt 开发的一个小型应用程序(从设计到打包成软件.exe文件的总结)
- 给定一个源代码文件(.cs, .java),输出该文件的总行数、空行数、注释行数、代码行数
- Java实现压缩一个目录下所有图片文件
- 把 Visual Studio .NET 源代码文件中C# XML注释提取成工程文档
- 一个用Dijkstra算法实现的路由算法的java程序——9 图信息文件示例
- 自己写的一个JSP上传文件和下载文件的JavaBean