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

时间:2014-04-25 12:53:36

标签: java c parsing antlr4

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

我发现我可以用AntLR做到这一点。我已经有了C语法,但我不知道我应该遵循的步骤是什么。

请有人给我一些如何处理的提示,例如,我应该生成一个听众还是访客?

谢谢!

1 个答案:

答案 0 :(得分:3)

简短回答

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


长答案

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

现在您已经拥有了解析树,您可以使用自己生成的侦听器接口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