我需要分析一些 C++ 源文件以生成一些非常基本的信息。我正在尝试做的事情是这样的:
- 假设我们有要分析的C++语法和C++源文件
- 分析器将像词法分析器一样读取源文件,它会识别 C++ 语法定义的关键字等。
分析器读取每一行后会输出如下信息: Line#:词法信息。例如,考虑一下:
int main(int x, int y) { return x+y; }
程序会输出:
Line 1: function: main, params: x, y
Line 2: paren "{"
Line 3: keyword: "return"
或类似的东西。
谁能告诉我该怎么做?我看过 Antlr 和 TXL,但我猜应该有更简单的方法。我想编写一个 Java 程序来完成这项工作。 我想做的第一件事是获取文件中的函数定义及其相应的行号。任何帮助将不胜感激。
谢谢, 安东
最佳答案
如果你想要你建议的输出,你就没有进行词法分析;您至少要进行一些解析,因为您必须了解您正在寻找的是函数声明与对象初始化。词法分析会给你类似的东西
int
main
(
int
x
,
int
y
)
{
return
x
+
y
;
}
而您想了解那些第一个标记实际上定义了一个函数。
不幸的是,解析 C++ 是出了名的困难,大多数解析器生成器都必须经过非常特殊的校准才能生成有效的 C++ 解析器。我建议查看现有的 C++ 解析器框架,可能类似于 Elsa。 .这将以您应该能够使用的格式为您提供所需的信息。另一种选择是直接连接到 C++ 编译器并处理底层 AST,它会为您处理所有解析和行号信息。 Treehydra工具在这里可能会有用,尽管您将编写 JavaScript 代码而不是 Java。
希望这对您有所帮助!
关于c++ - Java中非常简单的C++词法分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9145849/