我正在寻找解决此问题陈述的步骤/库/方法。
实施例: 给定一个Java文件,我需要在其中找到以下内容。
我需要提取这些并将其单独存储。 原因我为什么要这样做?
对反向索引的示例查询 1.找到具有类名称的文件列表:Sample 2.找到在AAA类中使用变量XXX的位置。
我需要支持上述
之类的查询所以,我的计划被赋予了一个文件,如果我从中构建这些组件,那么在它的顶部构建一个Inverted索引会很容易。
示例:示例 - 类 - Sample.java(关键字 - 组件 - FileName) 我想构建一个像上面这样的反向索引。
我看到它正在许多IDE中实现,例如IntelliJ。我感兴趣的是它需要多少努力来构建这样的东西。我想尝试为至少一种语言实现相同的功能。
提前致谢。
答案 0 :(得分:0)
您可以尝试“只”解析器;对于您的具体示例,这可能就足够了。
但是你需要为每种语言提供一个解析器。如果你只坚持Java,你可以很容易地找到Java解析器;只重用一个,重新设计一组语法规则来描述Java没有什么意义。
对于多种语言,这开始变得棘手。你可以:
将所有这些组合成一个整体的努力将会非常努力。
一个复杂的问题是,您可能需要的不仅仅是原始语法;您可能想知道符号的含义,并且对于每个符号,确切地知道在哪个文件中定义它的位置。毕竟,您希望您的索引在大小上是准确的,这将需要区分foo变量名称和foo函数名称。可以说你需要符号表。 作为一般规则,这是纯语言分解的地方; 有严重的Life After Parsing。
在这种情况下,您需要一套集成的工具来从不同的语言中提取信息。
我们的DMS Software Reengineering Toolkit就是这样一个框架,并为其预定义了大约40种语言。我们使用类似OP的建议过程来为基于DMS的搜索工具构建代码库的索引。像DMS一样构建是一项巨大的努力。