Вот пример парсера CDT, как вы хотите.
import java.util.HashMap;
import java.util.Map;
import org.eclipse.cdt.core.dom.ast.ASTVisitor;
import org.eclipse.cdt.core.dom.ast.IASTDeclaration;
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
import org.eclipse.cdt.core.dom.ast.gnu.cpp.GPPLanguage;
import org.eclipse.cdt.core.index.IIndex;
import org.eclipse.cdt.core.model.ILanguage;
import org.eclipse.cdt.core.parser.DefaultLogService;
import org.eclipse.cdt.core.parser.FileContent;
import org.eclipse.cdt.core.parser.IParserLogService;
import org.eclipse.cdt.core.parser.IScannerInfo;
import org.eclipse.cdt.core.parser.IncludeFileContentProvider;
import org.eclipse.cdt.core.parser.ScannerInfo;
public class _CDTParser {
public static void main(String[] args) throws Exception {
String sourcecode = "int a; void test() {a++;}";
IASTTranslationUnit translationUnit = _CDTParser.getIASTTranslationUnit(sourcecode.toCharArray());
ASTVisitor visitor = new ASTVisitor() {
@Override
public int visit(IASTDeclaration declaration) {
// When CDT visit a declaration
System.out.println("Found a declaration: " + declaration.getRawSignature());
return PROCESS_CONTINUE;
}
};
// Enable CDT to visit declaration
visitor.shouldVisitDeclarations = true;
// Adapt visitor with source code unit
translationUnit.accept(visitor);
}
public static IASTTranslationUnit getIASTTranslationUnit(char[] code) throws Exception {
FileContent fc = FileContent.create("", code);
Map<String, String> macroDefinitions = new HashMap<>();
String[] includeSearchPaths = new String[0];
IScannerInfo si = new ScannerInfo(macroDefinitions, includeSearchPaths);
IncludeFileContentProvider ifcp = IncludeFileContentProvider.getEmptyFilesProvider();
IIndex idx = null;
int options = ILanguage.OPTION_IS_SOURCE_UNIT;
IParserLogService log = new DefaultLogService();
return GPPLanguage.getDefault().getASTTranslationUnit(fc, si, ifcp, idx, options, log);
}
}
Результаты: Найдено заявление: Int А; Нашел объявление: void test() {a ++;}
Я мало знаю о написании автономных приложений на основе платформы Eclipse, но вам, вероятно, потребуется создать рабочее пространство и использовать рабочее пространство для создания проект. Некоторые соответствующие API: 'ResourcesPlugin.getWorkspace()', 'IWorkspace.newProjectDescription()', 'IWorkspace.getRoot()', 'IWorkspaceRoot.getProject()', 'IProject.create()'. Когда вы создаете проект Eclipse ('IProject'), для создания проекта CDT (' ICProject') требуется следующий шаг: 'CCorePlugin.getDefault(). CreateCDTProject()'. – HighCommander4
Кроме того, для работы 'ResourcesPlugin.getWorkspace()' вам может понадобиться сделать что-то вроде этого: https://wiki.sei.cmu.edu/aadl/index.php/Creating_Headless_(Command_Line)_Plugins – HighCommander4
(Этот учебник может быть проще: http://www.developertesting.com/archives/month200508/20050823-HeadlessHelloWorldInEclipse.html) – HighCommander4