java使用antlr4获取预处理器行,并解析C代码
我使用Antlr4解析C代码,并使用以下语法进行解析:
默认情况下,上述语法不提供任何解析规则来获取预处理器语句
通过添加以下行,我稍微修改了语法以获得预处理器行
externalDeclaration
: functionDefinition
| declaration
| ';' // stray ;
| preprocessorDeclaration
;
preprocessorDeclaration
: PreprocessorBlock
;
PreprocessorBlock
: '#' ~[\r\n]*
-> channel(HIDDEN)
;
在Java中,我使用以下侦听器获取预处理器行
@Override
public void enterPreprocessorDeclaration(PreprocessorDeclarationContext ctx) {
System.out.println("Preprocessor Directive found");
System.out.println("Preprocessor: " + parser.getTokenStream().getText(ctx));
}
该方法永远不会被触发。有人能建议一种方法来获取预处理器行吗
输入:
#include <stdio.h>
int k = 10;
int f(int a, int b){
int i;
for(i = 0; i < 5; i++){
printf("%d", i);
}
}
# 1 楼答案
实际上,对于
channel(HIDDEN)
,规则preprocessorDeclaration
不产生任何输出如果我删除
-> channel(HIDDEN)
,它会工作:执行:
在
CMyListener.java
文件中(根据我先前的回答),我添加了:执行: