Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用AntLR 4获取变量和函数的名称_Java_C_Parsing_Antlr4 - Fatal编程技术网

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

Java 使用AntLR 4获取变量和函数的名称,java,c,parsing,antlr4,Java,C,Parsing,Antlr4,我有一组用C语言编写的源代码文件,我需要生成一个解析来从文件中提取变量和函数的名称 我发现我可以用AntLR做这件事。我已经有了C语法,但我不知道我说的话应该遵循哪些步骤 请有人给我一个如何继续的提示,例如,我应该生成一个侦听器还是访问者 谢谢大家! 简短回答 Antlr为您生成侦听器接口。因此,您只需要实现这个接口,然后使用实现的实例遍历解析树 长话短说 Antlr是一个解析器生成器,因此如果您还没有完成,请使用语法文件生成解析器源代码 假设您的C语法位于名为TheC.g4的文件中,请使用a

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

我发现我可以用AntLR做这件事。我已经有了C语法,但我不知道我说的话应该遵循哪些步骤

请有人给我一个如何继续的提示,例如,我应该生成一个侦听器还是访问者

谢谢大家!

简短回答 Antlr为您生成侦听器接口。因此,您只需要实现这个接口,然后使用实现的实例遍历解析树


长话短说 Antlr是一个解析器生成器,因此如果您还没有完成,请使用语法文件生成解析器源代码

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

antlr4 TheC.g4

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

javac TheC*.java

现在,您可以编写自己的java代码,使用上面生成的lexer和parser类来解析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
注:以上所有代码示例均根据此

简短回答改编 Antlr为您生成侦听器接口。因此,您只需要实现这个接口,然后使用实现的实例遍历解析树


长话短说 Antlr是一个解析器生成器,因此如果您还没有完成,请使用语法文件生成解析器源代码

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

antlr4 TheC.g4

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

javac TheC*.java

现在,您可以编写自己的java代码,使用上面生成的lexer和parser类来解析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

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

请先尝试一下。遇到问题时,请随意提出更具体的问题。我觉得你现在的问题有点太宽泛了。好吧,我一直在尝试,但我遇到了一些问题,如果你能帮我检查一下这个问题,请先尝试一下。遇到问题时,请随意提出更具体的问题。依我看,你现在的问题有点太宽泛了。好吧,我一直在努力,但我遇到了问题,如果你能帮我检查一下这个问题,请谢谢你的帮助!!我一直在尝试,但我有问题,如果你能再次帮我检查这个问题,请。谢谢你的帮助!!我一直在尝试,但我遇到了问题,如果你能再次帮我检查这个问题,请。