java - 使用 AntLR 4 获取变量和函数的名称

标签 java c parsing antlr4

<分区>

我有一组用 C 语言编写的源代码文件,我需要生成解析以从文件中提取变量和函数的名称。

我发现我可以用 AntLR 做到这一点。我已经有了 C 语法,但我不知道我应该按照我所说的执行哪些步骤。

请有人给我提示如何进行,例如,我应该生成一个监听器还是一个访问者?

谢谢!

最佳答案

简答

Antlr 为您生成监听器接口(interface)。所以你只需要实现这个接口(interface),然后使用你的实现实例来遍历解析树。


长答案

Antlr 是一个解析器生成器,因此如果您还没有使用它,请使用您的语法文件生成解析器源代码。

假设您的 C 语法在名为 TheC.g4 的文件中,使用 antlr4 生成源代码:

antlr4 TheC.g4

此步骤的输出是几个生成的包含解析器实现的 java 源文件。您可以使用 javac 编译源代码,例如:

javac TheC*.java

现在您可以编写自己的 Java 代码,使用上面生成的词法分析器和解析器类来解析您的 C 源文件。

TheCLexer lexer = new TheCLexer(input); // use the generated lexer to tokenize the C source
CommonTokenStream tokens = new CommonTokenStream(lexer);
TheCParser parser = new TheCParser(tokens);
ParserRuleContext<Token> tree = parser.compilationUnit(); // <<--This part will be different for you depending on the root of your grammar

现在您有了解析树,您可以使用自己实现的生成的监听器接口(interface) TheCListener 来使用这棵树

ParseTreeWalker walker = new ParseTreeWalker(); // create standard walker
MyListener extractor = new MyListener(parser); // MyListener is your implementation of TheCListener interface
walker.walk(extractor, tree); // initiate walk of tree with listener

注意:以上所有代码示例均改编自此 page

关于java - 使用 AntLR 4 获取变量和函数的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23293758/

相关文章:

c - 如何在 C 中调用 COM 组件

java - Thymeleaf - 输入动态字符串列表

java - 自动检查 java 代码的正确约定和文档

C桶字符串

c# - 将 C 翻译成 C# 和 HLSL : will this be possible?

c# - 检测密码保护的word文件

parsing - 给定重复的部分,如何使用 Powershell 查找符合特定条件的部分

java - 大文件的 DOM 与 SAX XML 解析

java - Java EE 上的通知样式 Google 日历

java - 当软键盘处于 Activity 状态时,设置文本不起作用