论坛首页 综合技术论坛

关于一个算法设计问题,值得想想,大家来看看

浏览 2271 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-10-11  
如果使用与相关的知识,设计算法来找出一段程序代码中:

       (1)定义了但未被使用的变量;
      (2)使用了但没有被定义的变量;
      (3)其他与变量相关的错误


我的初步想法是:
 
   1.定义一个变量类,
       Class Var
      {
         属性: name,type,isInit(是否初始化),initVal(初始化值),isUsed(是否被使用过);
         方法: 一些基本方法;
      }
   2.程序代码中每个声明的变量(new个Var),作为图的一个结点,用邻接表来实现图。
   3.对使用的每个变量,对图进行搜索(BFS或者DFS),来看是不是被定义过的。(根据Var的name和type判断)并改变isUsed属性。
   4.再对图遍历次,根据Var的isUsed属性看是否有定义了但没被使用的变量。
   5.可以增加些Var属性,来判断是否有重复定义,是否初始化错误之类的。(解决问题3


请教各位JE上的大虾们,可以从下面几个方面但不限于谈谈自己看法(不用说的太复杂,说说思想就行):
    1.对我的想法做出评价
    2.如果必须用图,有没有更好的实现办法
    3.不考虑用图,有没有更好的解决办法.(考虑O(n))
    4.具体的编译器是怎么实现的这些问题的
   发表时间:2008-10-30  
用正则查找可能更简单一些。

0 请登录后投票
   发表时间:2008-10-30  
查找未使用的变量的js实现,机器比较差开eclipse很慢
<textarea id="txtCode" rows="10" cols="50">String a;
String b="abc";
int i;
public char d;
public float c=123;</textarea>
<input type="button" name="btnCheck" id="btnCheck" value="检测">

<script type="text/javascript">
function $(sId){
return document.getElementById(sId);
}

var aClass=[
"int","char","long","double","byte",
"String","List","Map","Iterator"
/*,....*/
];

var sRegUnUse="([private|public|protected]\\s+)?"
      +"("+aClass.join("|")+")\\s+"
      +"([\\w|\\$]+)"
      +"[\\s*?=\\s*?|null]?;";

var oRegUnUse=new RegExp(sRegUnUse,"g");

$("btnCheck").onclick=function(){
var sCode=$("txtCode").value;
var aUnUseVar=[];
while(oRegUnUse.exec(sCode)){
aUnUseVar.push(RegExp.$3);
}
alert("未使用变量:"+aUnUseVar.join("、"));
}
</script>

0 请登录后投票
   发表时间:2008-11-06  
请看编译原理的龙书
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics