快捷搜索:   服务器  安全  linux 安全  MYSQL  dedecms

基础入门:提取C++库函数的代码

    提取C++库函数的代码,没有仔细测试。大家可以测试一下,修改一下。

 package edu.kevin.regular;

import java.io.*;
import java.util.*;
import java.util.regex.*;

public class SrcAnalyze ...{

    private String srcDir;

    private HashSet allAPI;

    private HashSet inAPI;

    private Pattern pt;

    public SrcAnalyze(String dir) ...{
        srcDir = dir;
        allAPI = new HashSet(1000);
        inAPI = new HashSet(1000);
        //抽取C++的库函数调用
        pt = Pattern.compile(\"(\\b+)(\\w+)\\([^\\)]*\\)(\\s*(\\{)|[^\\{])\");
    }

    public void extract() ...{

        Date start = new Date();
        long startTime = start.getTime();

        extDir(srcDir);

        for (Object hs : inAPI) ...{
            if (allAPI.contains(hs)) ...{
                allAPI.remove(hs);
            }
        }

        Date end = new Date();
        long endTime = end.getTime();
        //计算程序运行时间
        System.out.println(\"Time: \" + (endTime - startTime) + \"ms\");
    }

 //遍历指定目录(包括子文件夹)
    private void extDir(String strPath) ...{
        File dir = new File(strPath);
        File[] files = dir.listFiles();

        if (files == null) [Page]
            return;
        for (File fl : files) ...{
            if (fl.isDirectory()) ...{
                extDir(fl.getAbsolutePath());
            } else ...{
                String strFileName = fl.getAbsolutePath();
                if (strFileName.matches(\"^.+\\.([cChH]|(cpp))$\"))
                    readFile(strFileName);
            }
        }

    }

    private void readFile(String filename) ...{
        try ...{
            BufferedReader in = new BufferedReader(new FileReader(filename));
            String s = null;
            StringBuffer tmp = new StringBuffer(\"\");
            //删除所有的注释(单行的双行的)
            while ((s = in.readLine()) != null) ...{
                if (!(s.matches(\"^\\s*/\\*.+$\"))) ...{
                    // get rid of comment like \"//...\"(Single Line) tmp.append(s.replaceAll(\"\"[^\"]*\"\", \"\").replaceAll(
                            \"//.+$\", \"\")); [Page]
                } else ...{
                    // get rid of comment like \"/*...*/\"(Multi-Lines)
                    if (!(s.matches(\"^.+\\*/$\"))) ...{
                        while ((s = in.readLine()) != null) ...{
                            if (s.matches(\"^.+\\*/$\"))
                                break;
                        }
                    }
                }
            }
            in.close();
            //抽取库函数调用
            extMethod(tmp);
        } catch (IOException e) ...{
            System.out.println(e.toString());
        }
    }

        //抽取库函数调用
    private void extMethod(StringBuffer src) ...{

        int i = 0, j = 0;
        String tmp;

        // internal API
        Matcher m = pt.matcher(src); [Page]

        while (m.find()) ...{
            tmp = m.group(2);
            if (!tmp.equals(\"if\") && !tmp.equals(\"for\") && !tmp.equals(\"while\")
                    && !tmp.equals(\"switch\") && !tmp.equals(\"return\")) ...{
                allAPI.add(tmp);
                if (m.group(4) != null)
                    inAPI.add(tmp);
            }
        }

    }

    public void print() ...{

        System.out.println(\"+++++++++++++++++++++++++++++++++++++++\");

        Object[] allAPI_List = allAPI.toArray();
        Arrays.sort(allAPI_List);
        for (Object all : allAPI_List)
            System.out.println(all);

        System.out.println(\"+++++++++++++++++++++++++++++++++++++++\");

    }

    public static void main(String[] args) ...{
        SrcAnalyze test = new SrcAnalyze(\"D:\\Test\");
        test.extract();
        test.print();
    }

}

顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论