[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[cdt-dev] Re: Codan evolution
|
HEllo
I am interested in codan but with an aim to use it outside of eclipse.
I managed to write a very simple application that uses CDT to parse C
files, but there is something I would like to do I cannot.
If I feed the following file to the parser, it does not report any
problem:
qsdqsf dsfsdf sdf
int function(void * pointer)
{
return toto;
}
Here is the code for the parser and the way I use it (sorry for the
formatting). What am I doing wrong ?
public boolean check(File toCheck) throws IOException,
CoreException {
IScannerInfo scannerInfo = new ScannerInfo();
ParserLanguage language = ParserLanguage.CPP;
IParserLogService logService = new NullLogService();
ICodeReaderFactory factory = FileCodeReaderFactory.getInstance();
CodeReader codeReader = factory .createCodeReaderForTranslationUnit(toCheck.getPath());
IScannerExtensionConfiguration scannerConfiguration =
(language == ParserLanguage.C ? new GCCScannerExtensionConfiguration()
: new GPPScannerExtensionConfiguration());
IScanner scanner = new CPreprocessor(codeReader,
scannerInfo, language,
logService, scannerConfiguration, factory);
ISourceCodeParser parser = new GNUCPPSourceParser(scanner,
ParserMode.COMPLETE_PARSE, logService,
new ANSICPPParserExtensionConfiguration());
DefaultLogService log = new DefaultLogService() {
@Override
public void errorLog(String message) {
System.err.println(message);
}
@Override
public boolean isTracing() {
return true;
}
@Override
public boolean isTracingExceptions() {
return true;
}
@Override
public void traceException(Throwable th) {
th.printStackTrace();
}
@Override
public void traceLog(String message) {
System.err.println(message);
}
};
IASTTranslationUnit astTranslationUnit = parser.parse();
ASTVisitor visitor = new CPPASTVisitor() {
@Override
public int visit(ICPPASTBaseSpecifier baseSpecifier)
{
System.err.println(baseSpecifier);
return super.visit(baseSpecifier);
}
@Override
public int visit(ICPPASTNamespaceDefinition
namespaceDefinition) {
System.err.println(namespaceDefinition);
return super.visit(namespaceDefinition);
}
@Override
public int visit(ICPPASTTemplateParameter
templateParameter) {
System.err.println(templateParameter);
return super.visit(templateParameter);
}
@Override
public int visit(IASTDeclaration declaration) {
System.err.println(declaration);
return super.visit(declaration);
}
@Override
public int visit(IASTDeclarator declarator) {
System.err.println(declarator);
return super.visit(declarator);
}
@Override
public int visit(IASTDeclSpecifier declSpec) {
System.err.println(declSpec);
return super.visit(declSpec);
}
@Override
public int visit(IASTEnumerator enumerator) {
System.err.println(enumerator);
return super.visit(enumerator);
}
@Override
public int visit(IASTExpression expression) {
System.err.println(expression);
return super.visit(expression);
}
@Override
public int visit(IASTInitializer initializer) {
System.err.println(initializer);
return super.visit(initializer);
}
@Override
public int visit(IASTName name) {
System.err.println(name);
return super.visit(name);
}
@Override
public int visit(IASTParameterDeclaration
parameterDeclaration) {
System.err.println(parameterDeclaration);
return super.visit(parameterDeclaration);
}
@Override
public int visit(IASTProblem problem) {
System.err.println(problem);
return super.visit(problem);
}
@Override
public int visit(IASTStatement statement) {
System.err.println(statement);
return super.visit(statement);
}
@Override
public int visit(IASTTranslationUnit tu) {
System.err.println(tu);
return super.visit(tu);
}
@Override
public int visit(IASTTypeId typeId) {
System.err.println(typeId);
return super.visit(typeId);
}
};
visitor.visit(astTranslationUnit);
IASTProblem[] cppProblems = astTranslationUnit
.getPreprocessorProblems();
for (IASTProblem problem : cppProblems)
System.err.println(problem.getMessage());
return cppProblems.length == 0;
}
--
Arnaud Bailly -- OQube
<software engineering>
http://www.oqube.com/