就像IDE中显示一个文件中的所有方法,是如何解析文档得到的呢,按“;”分割语句,然后判断(){}么,谢谢,如何识别一条语句是方法呢?

解决方案 »

  1.   

    java有个反射机制可以返回方法名
    没观察过,呵呵
      

  2.   

    用不了反射,因为代码在编辑阶段就的用,就是如何判断一条语句是方法,根据签名么,那些IDE是怎么做到的?
      

  3.   

    觉得更近似算法逻辑的问题,要考虑到以下几点:
    1、一定会用到StringTokenizer
    2、一个方法之前的字符串只能是以"{"、"}"、";"结束的。
    3、方法包括访问修饰符、返回类型、方法名、(参数)、{方法体}几部分。
    4、方法的修饰符、返回类型、方法名之间一定会有空格。
    等等
    希望对楼主能有帮助 ^_^
      

  4.   

    谢谢大家.
    1.在接口中的方法是没有{方法体}的.
    2.如果按";"分割比较合理.
    3.访问修饰符可以没有,返回类型可以是自定义的类,在加上方法名的不确定,给判断上带来了不确定性.
    比如,new A(){...}; 跟方法差不多.
    所以是否可以这样总结:
    1.按某种方法把全文分割,使得到的碎片包含整个方法.
    2.得到的每个语句从后向前检索,
      2.1如果该方法所在的类不是接口,该语句从后向前,除去空格最后一个字符必须是"}",然后向前检索,可以用栈或其他方法忽略方法体中成对的"{","}",然后找到与其匹配的"{".
      2.2如果该方法所在类是接口,忽略第2步.
    3.从上步得到的"{"位置,忽略空格,前一个字符是")",然后向前检索,可以用栈或其他方法忽略方法体中成对的"(",")",然后找到与其匹配的"(".这之间的字符串可自行按","和空格进行解析,得到参数.
    4.从上步得到的"("位置,忽略空格,向前搜索一个单词,得到方法名.
    5.继续向前搜索一个单词,该单词不可以是"new",得到返回值类型.
    6.将剩下的字符串按单词全部分割,然后与关键字遍例来确定,比如"public","protected", "private","final","static","synchronized","native"......如果什么都没有按默认处理.
    7完活.
    大家看看按这样的方法分割.
      

  5.   

    强烈建议使用JavaCC,它带有一些现成的写好的.jj文件,能够对 .c .vbs .js 等做分析
      

  6.   

    这样想会不会简单些:
    从总体上看,在一个类中除了数据成员就是方法,还可以有静态初始化程序段,这样在每个类中划分等级.在一级"(){}"都是方法,这样就找到该类的本身的方法.在这一级"(){}"内部还可以有"(){}",称之为2级,里面包括一些if,else,while和内部类中的方法,去除判断循环,在内部类中是个递归查找的过程.这样差不多就把方法都找到了.大家看看这么想对么?