使用java在c文件中查找宏变量

使用java在c文件中查找宏变量,java,c,regex,macros,Java,C,Regex,Macros,我正在尝试解析一个c文件,并找到所有以“Apple\ux”开头的变量。我将整个c文件读入一个字符串,然后使用正则表达式获取所有变量。但我有一个宏定义为: #定义IAMMACRO(var,ext)var##ext 所以如果我有 IAMAMACRO(Apple_,Variable) 我需要在解析后得到Apple_变量的值,而不是Apple_ 注:我更喜欢简单的解决方案。据我所知,您需要: 读取,然后解析C(C++?)文件 将其嵌入到软件中 要获得简单的解决方案:) 因此,使用gcc galax

我正在尝试解析一个c文件,并找到所有以“Apple\ux”开头的变量。我将整个c文件读入一个字符串,然后使用正则表达式获取所有变量。但我有一个宏定义为:

#定义IAMMACRO(var,ext)var##ext

所以如果我有

IAMAMACRO(Apple_,Variable)
我需要在解析后得到Apple_变量的值,而不是Apple_


注:我更喜欢简单的解决方案。

据我所知,您需要:

  • 读取,然后解析C(C++?)文件
  • 将其嵌入到软件中
  • 要获得简单的解决方案:)
因此,使用gcc galaxy的解决方案相当复杂,而且很繁重(事实上,您并不关心编译)

建议:不要试图解析你自己。这是一件大事

解决方案:只需解析即可。使用库来实现这一点

使用ANTLR4(不那么容易),使用已经为C/C++编写的语法:

ANTLR4:

C++语法:

又见:


希望有帮助

最简单的解决方案是在处理之前用C编译器对文件进行预处理。下一个最简单的方法是编写符合标准的C预处理器。是否有任何方法可以用Java本身预处理C文件:|这里的系统中没有gcc编译器。或者我可以使用gcc-e。使用gcc的-e标志:
gcc-e-o test.p test.c
您可以尝试一个基于Java的c预处理器,如。@Ram我正在尝试创建一个使用此功能的软件。如果使用该软件的用户没有gcc编译器该怎么办?