解析java源文件
尝试从java源文件中解析出类、方法、属性等信息,但下面的代码没有完全实现。
Sub parseJava()
Dim package_name as String
'read a file
Documents.Open FileName:="f:\CommandCm.java", ConfirmConversions:=False, ReadOnly:=True
paraNo = ActiveDocument.Paragraphs.Count
For lineNo = 1 To paraNo
Set curParaWords = ActiveDocument.Paragraphs(lineNo).Range.Words
Dim strCurPara as String
strCurPara = ActiveDocument.Paragraphs(lineNo).Range.Text
If InStr(strCurPara, "package")=1 Then
'包名是package后、分号前的部分
tmpStr = Right(strCurPara,Len(strCurPara)-Len("package")-1)
package_name = Left(tmpStr, Len(tmpStr)-2)
End If
If InStr(strCurPara, "public class")=1 Then
'类名是这一行的第三个单词,且不含末尾空格
class_name = RTrim(curParaWords(3).Text)
End If
If InStr(strCurPara, "public interface")=1 Then
'接口名是这一行的第三个单词,且不含末尾空格
class_name = RTrim(curParaWords(3).Text)
End If
Select Case curParaWords(2).Text
Case "public"
Case "private"
Case "protected"
Case Else
End Case
If curParaWords(2)="public" Then
'接口名是这一行的第三个单词,且不含末尾空格
class_name = RTrim(ActiveDocument.Paragraphs(lineNo).Range.Words(3).Text)
End If
Next lineNo
ActiveDocument.Close
End Sub
下面是业务逻辑:
数据结构:
类相关数据表ClassInfo(Map)
key: name, description, class_name, package, extends, interface;
属性数据表PropInfo(List)
方法数据表MethodInfo(List)
文本格式约定:
顶格、package起首代码行为package声明行;
顶格、public class起首的代码行是类声明行;
顶格、 public interface起首的代码行是接口声明行;
一个tab后跟public、private、protected是方法或者属性
有左括号的是方法, 左括号前单词是方法名,方法名前是返回值的数据类型;
无左括号 的是 属性,等号左边单词是属性名,若无等号分号前单词是属性名,若都没有输出一条 “文件名:行号:异常属性/方法,手工提取” 提示;
一个tab后跟其他字母 输出一条“文件名:行号:异常属性/方法,手工提取”提示;
一个tab后跟非字母符号(如/*是注释,@是编译标志)略过;
流程:
用户输入目标目录
将文件名保存在ClassInfo.name和class_name中;
加载该目录下所有java文件, 对于一个java文件:
第一次文本逐行读取:提取除方法/属性说明外所有信息;
第二次文本逐行读取:寻找以“* 方法名”开始的行,作为方法说明,放入对应的方法Map中;
解析java源文件的更多相关文章
- 深入解析java虚拟机-jvm运行机制
转自oschina 一:JVM基础概念 JVM(Java虚拟机)一种用于计算设备的规范,可用不同的方式(软件或硬件)加以实现.编译虚拟机的指令集与编译微处理器的指令集非常类似.Java虚拟机包括一套字 ...
- 深入解析java乱码
1.什么是编码 ,为什么要编码 先前从没有思考这么深入的问题,觉得一切理所当然,直到有一天java的乱码让我跪了,他不在听我的话,到处是乱码,这次我不打算放过它,我要收拾了它. 大家都知道,文本文件, ...
- 使用JDT.AST解析java源码
在做java源码的静态代码审计时,最基础的就是对java文件进行解析,从而获取到此java文件的相关信息: 在java文件中所存在的东西很多,很复杂,难以用相关的正则表达式去一一匹配.但是,eclip ...
- 【JVM系列】一步步解析java执行内幕
对于任何一门语言,要想达到精通的水平,研究它的执行原理(或者叫底层机制)不失为一种良好的方式.在本篇文章中,将重点研究java源代码的执行原理,即从程 序员编写JAVA源代码,到最终形成产品,在整个过 ...
- 【java】解析java类加载与反射机制
目录结构: contents structure [+] 类的加载.连接和初始化 类的加载 类的连接 类的初始化 类加载器 类加载器机制 自定义类加载器 URLClassLoader类 反射的常规操作 ...
- 自己挖的坑跪着也要填完---mapper配置文件和java源文件在同一包下
本来准备研究下mybatis源码执行流程的,就随意搭建了个项目,所有配置如下: 一切看似都是那么的正常,然而执行的时候:Exception in thread "main" org ...
- 一个java源文件中为什么只能有一个public类。
我们都遇到过一个源文件中有多个java类,但当第一个类使用public修饰时,如果下面还有类使用public修饰,会报错.也就是是说一个java源文件最多只能有一个public类. 当有一个publi ...
- Java源文件编译成功但是运行时加载不到文件
最近系统重装了一些,Java等环境变量都需要重新配置,配置好以后编写了一个Java源文件编译了一下,通过Javac编译源文件,编译成功,但是再通过Java运行时没找到报出找不到加载文件或者加载文件不存 ...
- Atitit 表达式原理 语法分析 原理与实践 解析java的dsl 递归下降是现阶段主流的语法分析方法
Atitit 表达式原理 语法分析 原理与实践 解析java的dsl 递归下降是现阶段主流的语法分析方法 于是我们可以把上面的语法改写成如下形式:1 合并前缀1 语法分析有自上而下和自下而上两种分析 ...
随机推荐
- POJ 1584 A Round Peg in a Ground Hole 判断凸多边形 点到线段距离 点在多边形内
首先判断是不是凸多边形 然后判断圆是否在凸多边形内 不知道给出的点是顺时针还是逆时针,所以用判断是否在多边形内的模板,不用是否在凸多边形内的模板 POJ 1584 A Round Peg in a G ...
- Tomcat:tomcat部署war包配置SSL访问
Linux-CentOS7部署 war放置 war放到tomcat的webapps目录内 修改配置 修改tomcat的server.xml文件 HTTP: 找到Connector元素,修改端口 HTT ...
- MyBatis:Mybatis逆向工程问题记录
近日我在搭建springboot+mybatis+mysql 的整合项目(自己测试玩)的时候用到了mybatis的逆向工程,来这里记录一下我的菜鸟编码过程 首先我在maven中引入这些依赖 <d ...
- Nginx:Nginx配置url重定向
符号含义: 正则表达式匹配: ~ 为区分大小写匹配 ~* 为不区分大小写匹配 !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 文件及目录匹配: -f和!-f用来判断是否存在文件 -d和!-d用 ...
- python 正则表达式 中级
1.子表达式 将几个字符的组合形式看做一个大的字符,例如匹配IP地址,形如 127.0.0.1 答案一:p1='\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}' pattern1 ...
- linux--------find命令之xargs
p.p1 { margin: 0; font: 18px "Hannotate SC"; color: rgba(4, 51, 255, 1); -webkit-text-stro ...
- yoyogo v1.7.5 发布, 独立依赖注入DI
YoyoGo v1.7.5 YoyoGo (Go语言框架) 一个简单.轻量.快速.基于依赖注入的微服务框架( web .grpc ),支持Nacos/Consoul/Etcd/Eureka/k8s / ...
- 深入理解Java多线程——线程池
目录 为什么需要线程池 定义 ThreadPoolExecutor 工作队列workQueue 不同的线程池 Executor 线程池的工作原理 线程池生命周期 线程池增长策略 线程池大小的设置 线程 ...
- vs2013恢复默认设置
选择 工具->import or export settings(工具->导入导出设置),选择最下面一项即可
- ScienceDirect内容爬虫
爬虫违法,本贴方法只限于个人对数据的分析使用,其爬虫程序已作相关设置,以减小服务器压力.不适宜长期使用. 一.前期准备 1.使用chrome打开ScienceDirect网站(https://www. ...