我正在尝试创建一个应用程序来搜索我公司的 ColdFusion 代码库。我希望能够进行智能搜索,例如:找到定义函数的位置(而不是在调用函数的任何地方命中)。为此,我需要解析 ColdFusion 代码以识别函数声明、函数调用、数据库查询等内容。
我研究过使用 lex 和 yacc,但我以前从未使用过它们,而且学习曲线似乎非常陡峭。我希望那里已经有一些我可以使用的东西。我的另一个选择是一堆难以维护的正则表达式意大利面条代码,我想避免这种情况。
我正在尝试创建一个应用程序来搜索我公司的 ColdFusion 代码库。我希望能够进行智能搜索,例如:找到定义函数的位置(而不是在调用函数的任何地方命中)。为此,我需要解析 ColdFusion 代码以识别函数声明、函数调用、数据库查询等内容。
我研究过使用 lex 和 yacc,但我以前从未使用过它们,而且学习曲线似乎非常陡峭。我希望那里已经有一些我可以使用的东西。我的另一个选择是一堆难以维护的正则表达式意大利面条代码,我想避免这种情况。
我使用了CFEclipse 的源代码,因为它是开源的并且有一个解析器。如果我们出售/重新分发它,不确定它的合法性,但我们只是将它用于内部工具。
为真正的语言编写解析器通常很困难,因为它们包含 Lex 和 Yacc 通常不能很好处理的结构,例如,语言不是 LALR(1)。ColdFusion 可能比某些更容易,因为它具有类似 XML 的风格。
如果您想快速构建一个复杂的解析器,您可以考虑使用我们的 DMS Software Reengineering Toolkit,它支持 GLR 解析。
如果您想避免自己编写或破解所有这些正则表达式,您可以考虑我们的源代码搜索引擎。它具有语言敏感的解析器,可以非常快速地搜索非常大的源代码库。它的“语言敏感”解析器之一是 AdhocText,它旨在处理“通用”编程语言,例如您可能在随机编程书中找到的那些;它甚至可以理解 ColdFusion 等类似 XML 的标签。您可以从提供的链接下载评估版进行试用。
编辑 4/3/2010:最近添加到 SCSE 的功能是能够单独标记定义和使用。这将解决 OP 查找函数定义而不是所有调用的愿望。
不存在。由于 ColdFusion 更像是脚本而不是代码,我想为它编写解析器会很困难。
ColdFusion Builder 可以将 CFM/CFC 解析为 Eclipse 中的大纲。也许您可以研究一下 CF Builder 插件是否可以做您想做的事情。