尝试从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源文件的更多相关文章

  1. 深入解析java虚拟机-jvm运行机制

    转自oschina 一:JVM基础概念 JVM(Java虚拟机)一种用于计算设备的规范,可用不同的方式(软件或硬件)加以实现.编译虚拟机的指令集与编译微处理器的指令集非常类似.Java虚拟机包括一套字 ...

  2. 深入解析java乱码

    1.什么是编码 ,为什么要编码 先前从没有思考这么深入的问题,觉得一切理所当然,直到有一天java的乱码让我跪了,他不在听我的话,到处是乱码,这次我不打算放过它,我要收拾了它. 大家都知道,文本文件, ...

  3. 使用JDT.AST解析java源码

    在做java源码的静态代码审计时,最基础的就是对java文件进行解析,从而获取到此java文件的相关信息: 在java文件中所存在的东西很多,很复杂,难以用相关的正则表达式去一一匹配.但是,eclip ...

  4. 【JVM系列】一步步解析java执行内幕

    对于任何一门语言,要想达到精通的水平,研究它的执行原理(或者叫底层机制)不失为一种良好的方式.在本篇文章中,将重点研究java源代码的执行原理,即从程 序员编写JAVA源代码,到最终形成产品,在整个过 ...

  5. 【java】解析java类加载与反射机制

    目录结构: contents structure [+] 类的加载.连接和初始化 类的加载 类的连接 类的初始化 类加载器 类加载器机制 自定义类加载器 URLClassLoader类 反射的常规操作 ...

  6. 自己挖的坑跪着也要填完---mapper配置文件和java源文件在同一包下

    本来准备研究下mybatis源码执行流程的,就随意搭建了个项目,所有配置如下: 一切看似都是那么的正常,然而执行的时候:Exception in thread "main" org ...

  7. 一个java源文件中为什么只能有一个public类。

    我们都遇到过一个源文件中有多个java类,但当第一个类使用public修饰时,如果下面还有类使用public修饰,会报错.也就是是说一个java源文件最多只能有一个public类. 当有一个publi ...

  8. Java源文件编译成功但是运行时加载不到文件

    最近系统重装了一些,Java等环境变量都需要重新配置,配置好以后编写了一个Java源文件编译了一下,通过Javac编译源文件,编译成功,但是再通过Java运行时没找到报出找不到加载文件或者加载文件不存 ...

  9. Atitit 表达式原理 语法分析 原理与实践 解析java的dsl  递归下降是现阶段主流的语法分析方法

    Atitit 表达式原理 语法分析 原理与实践 解析java的dsl  递归下降是现阶段主流的语法分析方法 于是我们可以把上面的语法改写成如下形式:1 合并前缀1 语法分析有自上而下和自下而上两种分析 ...

随机推荐

  1. js实现返回顶部按钮

    html: <div class="box"></div> <div class="box1"></div> & ...

  2. Linux:Ka li 2020.4 安装教程

    下载地址 Ka li官网 :https://www.kali.org install 版本是安装版,安装后使用: Live    版本可以直接启动运行: netinstaller  版本是网络安装版, ...

  3. 6-x2 echo命令:将指定字符串输出到 STDOUT

    echo 用法 常用转义符 echo 用法     echo 用来在终端输出字符串,并在最后默认加上换行符. echo 加上-n参数可以使数据字符串后不再换行 echo 加上-e参数可以解析转义字符 ...

  4. 【重学Java】IO流

    IO流的UML类图 File类 File类概述和构造方法[应用] File类介绍 它是文件和目录路径名的抽象表示 文件和目录是可以通过File封装成对象的 对于File而言,其封装的并不是一个真正存在 ...

  5. mysql 索引介绍与运用

    索引 (1)什么是索引? 是一种提升查询速度的 特殊的存储结构. 它包含了对数据表里的记录的指针,类似于字典的目录. 当我们添加索引时会单独创建一张表来去存储和管理索引,索引比原数据大,会占用更多的资 ...

  6. 可搜索加密技术 - 学习笔记(二)- 预备知识:HMAC-SHA256函数

    由于在之后的算法中会用到HMAC-SHA256函数,这里先简单对其进行一个介绍. 一.HMAC算法 什么是HMAC算法? HMAC是密钥相关的哈希运算消息认证码(Hash-based Message ...

  7. c语言:解释程序和编译程序

    编译程序和解释程序是程序执行的两种不同执行方式. 编译程序:编译程序的功能是把用高级语言书写的源程序翻译成与之等价的目标程序.编译过程划分成词法分析.语法分析.语义分析.中间代码生成.代码优化和目标代 ...

  8. Java基础00-循环语句7

    1. for循环语句 1.1 循环结构 1.2 for循环语句的格式 执行流程图: 1.3 案例 (1)输出数据 (2)求和 (3)求偶数和 (4)水仙花 public static void mai ...

  9. Day1 Markdown学习!

    Markdown学习 标题 一级标题:# (空格)+内容 二级标题:##(空格)+内容 同理可支持到六级标题 字体 Hello,World! 两边两个** 加粗 Hello,World! 两边一个* ...

  10. groff编写man页

    groff 是大多数 Unix 系统上所提供的流行的文本格式化工具 nroff/troff 的 GNU 版本.它一般用于编写手册页,即命令.编程接口等的在线文档.在本文中,我们将给你展示如何使用 gr ...