<% '************************************************************ '* '* '* '* '* '* '* '* '* '* '* '* '* '* '* '* '* '* '* '* '* '* '************************************************************ '************************************************************ '* '* '* '************************************************************ class Dissect_ASP private blnFile private Dissect '文件无 ASP 代码 '结果文集 读取 ASP 原码,然后分析成 XML 文件. 本篇代码作者:Coder / 3710167@qq.com / coder.126 2003-09-02 15:03 如果有办法生成流程语句的结构图,那子程序(class/function/sub 等)里 的编码可以直接交给这个函数处理生成合理的全布结构流程图. 而生成图形的 Class 我只作了第一层的显示. 关键难点是如何在无限制镶嵌的流程语句中生成正确的流程图来. 生成 XML 这段东西也比较生硬,语法分析部份还有很多的缺陷,容错和分析 能力还比较弱,如果真的要去作的话.Dissect_ASP.Dissect_Line 这个 Private 函数还要作进一步的休整. 很遗憾,这个东西才写了不到一半. 完成的只是将 ASP 分析成 XML 部份,而生成真正流程图部份由于本人的程序 基础不过关.实在是力不从心,现在公布出来这点东西,希望有志人事将它 完成,如果对这篇代码有什么
问题或是有什么好的想法可以和我联系一下. 也可以讨论一下如何更好的通过生成的 XML 生成完美的流程图.
程序名称:ASP 代码分析器
Private sub Class_Initialize() blnFile =false end sub '************************************************************* '* '* '* '************************************************************* public function LoadFile(byval FileData) dim aryFileData 导入文件内容然后分出代码区并生成第一层代码,需要的参数:分析文件的代码(FileData)
dim intUbound dim fIndex dim strASP dim intASP dim strHTML aryFileData=split(FileData,"<" &; "%") intUbound=ubound(aryFileData) if intUbound=0 then LoadFile="该文件无 ASP 代码,无法进行分析." exit function end if if aryFileData(0)<>"" then Dissect=Dissect &; shift_html(aryFileData(0)) end if for fIndex=1 to intUbound intASP=instr(aryFileData(fIndex),"%" &; ">") '读取本块 ASP 代码块的结尾位置 strASP=left(aryFileData(fIndex),intASP-1) '截取纯 ASP 代码 if left(strASP,1)="=" then '如果< %后面第一个字符是=号,则表达该 ASP 块为单行显示代码 Dissect=Dissect &; "
response.write "&;_ right(strASP,len(strASP)-1) &;_ "" else '处理多行 ASP 代码 Dissect=Dissect &; lcase(Dissect_code(shift_html(strASP))) &; vbclrf end if '截取出% >号后的 HTML 代码 strHTML=right(aryFileData(fIndex),len(aryFileData(fIndex))-intASP-1) if strHTML<>"" then '保存
HTML 代码 Dissect=Dissect &; "
" &; shift_html(strHTML) &; "" end if next LoadFile=Dissect end function '************************************************************* '* '* '* '*********
**************************************************** private function Dissect_code(byval FileASP) dim arycode 处理 ASP 代码.需要参数:ASP 代码块中所有的代码(FileASP) '纯 ASP 代码 '% >所在位置
dim cIndex dim strASP arycode=split(FileASP,vbcrlf) for cIndex=0 to ubound(arycode) if arycode(cIndex)<>"" then strASP=strASP &; Dissect_Line(arycode(cIndex),cIndex) &; vbcrlf end if next Dissect_code=strASP end function '************************************************************* '* '* '* '* '*************************************************************