java源文件解析_解析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中;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值