Ark*_*ito 8 parsing antlr code-metrics parser-generator
我正在清理我的一个旧项目,它计算了一些关于大型软件项目的简单指标.其中一个指标是文件/类/方法的长度.目前我的代码"猜测"类/方法边界基于一个非常粗略的算法(遍历文件,保持"当前深度"并在遇到不带引号的括号时调整它;当你返回到关卡时,类或方法开始于,考虑退出).但是,这个过程存在许多问题,并且检测深度变化的"简单"方法并不总是有效.
为了使这个结果准确,我需要使用检测函数定义,类定义和深度变化的规范方法(在每种语言中).这相当于编写一个简单的解析器来生成解析树,该解析树至少包含我希望项目适用的每种语言的这些元素.
显然之前已经为所有这些语言编写了解析器,所以看起来我不应该重复这种努力(即使编写解析器很有趣). 是否有一些开源项目为一堆源语言收集即用型解析器库?或者我应该只是使用ANTLR从头开始创建自己的? (注意:我很高兴将项目移植到另一种语言来使用一个很好的现有资源,所以如果你知道一个,那么写入它的语言并不重要.)
如果您需要语言准确的解析,尤其是面对语言复杂性(如宏和预处理器条件),则需要完整的语言解析器.这些实际上构建起来相当多,而且大多数语言都不适合各种各样的解析器生成器.大多数语言分析器的作者也不会对其他语言感兴趣; 他们倾向于选择一些解析器生成器,它们在启动时显然不是一个巨大的障碍,为他们想要的特定目的实现解析器,然后继续前进.
结果:使用单一形式主义或共享基础定义的语言定义库很少.ANTLR人群维持着较大的集合IMHO之一,尽管据我所知,大多数解析器都不具备生产能力.Bison总是存在很长时间,所以你希望在某个地方收集一个语言库定义库,但我从来没有见过.
过去15年来,我一直在为程序分析和转换定义基础机械,并建立另一个名为DMS软件再造工具包的库.它具有适用于C,C++,C#,Java,COBOL(IBM企业版),JCL,PHP,Python等的生产质量解析器.您的意见当然可能与我的不同,但每天都与DMS一起使用以执行批量更改任务在大量的代码上.
我不知道其他任何语言定义成熟并构建在单一基础上的其他内容......可能是IBM的编译器就是这样一个集合,但IBM没有提供机制或语言定义.
如果您只想计算简单的度量标准,那么您可能只能使用词法分析器和临时嵌套计数(如您所述).在大多数情况下,甚至比它看起来更难以正常工作(查看Python,Perl和PHP疯狂的字符串语法).说完所有内容之后,即使是C也只是为了定义一个准确的词法分析器而做了大量的工作:我们有几千行复杂的正则表达式来涵盖你在Microsoft和/或GNU C中找到的所有奇怪的词汇.
由于DMS具有针对多种语言的一致定义的,成熟的解析器,因此DMS已经为相同的语言一致地定义了成熟的词法分析器.我们实际上构建了一个源代码搜索引擎(SCSE),它提供了跨多种语言的大型代码的快速搜索,这些代码通过使用它所遇到的语言并将这些词汇编入索引来快速查找.SCSE恰好计算了你正在讨论的指标类型,因为它为代码库编制索引,几乎就像你描述的那样,除了它有这些语言准确的词法分子使用.
归档时间: |
|
查看次数: |
1004 次 |
最近记录: |