栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

是否有用于JavaScript的静态Call-Graph和/或Control-Flow-Graph API?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

是否有用于JavaScript的静态Call-Graph和/或Control-Flow-Graph API?

为此,您需要:

  • 解析,
  • 名称解析(处理范围)
  • 类型分析(虽然可以说Javascript是“动态类型的”,但这里有各种类型的常量,包括此处特别感兴趣的函数常量)
  • 控制流分析(在方法内建立控制流图的结构)
  • 数据流分析(以跟踪这些类型的生成/使用位置)
  • 什么代表全局点分析(跟踪在函数之间传递的函数常数作为应用点的值)。

如何做到这一点在编译器文献中有很好的记录。但是,由于要花很多时间才能解决这个问题,所以“您可以使用解析器结果来获得所需的结果”形式的答案就有点不对了。

如果您可以应用所有这些机制,那么实际的结果就是一个 保守的 答案,例如“ A可能称为B”。反正这就是你所知道的

 void A(int x,y) { if (x>y) foo.B(); }

因为某个工具有时根本无法推理复杂的逻辑,所以即使应用程序设计者知道不可能,您也可能会得到“ A可能调用B”的信息:

 void A(int x) // programmer asserts x<4   { if (x>5) foo.B(); }

eval
使问题变得更糟,因为您需要跟踪到达eval命令的字符串值结果并对其进行解析,以获取有关逃避什么代码以及评估代码可能调用的函数的某种线索。如果有人将字符串中的“
eval”传递给eval,事情就会变得很讨厌:-{您可能还需要对程序执行上下文进行建模;我怀疑有很多包含回调的浏览器API。

如果有人为您提供了具有所有必要机械的完整配置工具,可以立即解决您的问题,那显然很棒。我怀疑您不会获得这样的报价,因为这样的工具不存在。原因是需要所有基础结构。它很难构建,几乎没有人可以仅使用一种工具来证明它的合理性。如果您发现即使是一个“优化的Javascript编译器”,也可能不会具备所有这些机制,尤其是全局分析,并且它所做的也不可能以易于使用的形式打包为您的目的而包装。

自1969年开始编程以来,我就一直在努力解决这个问题(当时我的某些程序是编译器,我想要所有这些东西)。做到这一点的唯一方法是分摊 许多
工具中所有这些机器的成本。

我公司提供了DMS Software Reengineering
Toolkit,这是一种通用编译器分析和转换机制的程序包,具有多种具有工业实力的计算机语言前端(包括C,C
++,COBOL和yes,Javascript)。DMS提供API,以使自定义工具可以在其通用基础上构建。

消息顶部列出的通用机制都存在于DMS中,包括控制流程图和数据流分析,可通过干净的文档化API获得这些信息。流分析必须与特定语言的前端联系在一起。这也需要一些工作,因此我们还没有针对所有语言完成它。我们已经为C完成了这一工作[在18,000个编译单元的系统上进行了整体测试,包括计算现有的250,000个函数的调用图,包括间接函数调用!],COBOL和Java,我们正在开发C
++。

DMS与该线程中的其他答案具有相同的“
Javascript”解析器答案,并且从这个角度来看,DMS并不比其他回答“在解析器之上构建”更好。区别应该很清楚:DMS中已经存在 机械
,因此工作不是实现机械和与解析器绑定的工作之一。它只是将其绑定到解析器。这仍然有些工作,但是要比仅从解析器开始要少得多。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/616457.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号