[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
RE: [cdt-dev] adding a new language to the CDT
|
Hi Michael,
just to make it clear, what you are trying to do cannot be
done via public API and is thus not supported by CDT.
When using CDT to add PL8 support you first have to make
the decision whether you are looking at language extension of c or
c++. Only, then you can safely reuse the existing implementation of IAST...
interfaces. In case your language is different, you should be creating
your own AST that represents PL8. I guess you just want minimal support for PL8,
so
you probably can get away with faking a
CASTTranslationUnit.
If you do have a parser that creates a reasonable
IASTTranslationUnit, you have to make sure that the language is registered with
CDT (there is an extension point for that). Also the langauge needs to return
the correct linkage-id, in
order to be considered for indexing. In your case you want
the stuff to be added to the c-linkage, so you should return
ILinkage.C_LINKAGE_ID.
You might have to use a debugger to figure out whether
your parser get's called and whether stuff is added to
the index.
Markus.
Hi,
I'm working on an Eclipse Plug-In to support a
procedural programming language called PL8, a PL/I variant for systems
programming. We have PL8 and C source files in one source tree (project). Our
compiler builds all files to object files and then they are linked together to
one binary. It is possible to call a C-function from a PL8-function and vice
versa. So our idea was to use the CDT and treat the source tree as a C/C++
project. The C/C++ files will be handled by CDT and the PL8 files are handled
by a PL8 editor (Syntax highlighting, outline view). We also want to use the
code navigation feature in the PL8 context. Therefore our idea was to add some
informations like function definitions in the C-index. We created a Java class
PL8Language implementing the ILanguage interface from the ILanguage Extension
Point of the CDT. The parser of the PL8 should not create an own index, but
should add the functions of PL8 language to the index, created by the
CDT-Parser.
If I click e.g. on a
PL8-function in a C-file, the C-indexer searches for the function in the now
combined index for the location of the function and jumps to it. If I click in
a PL8-file, my own indexer searchs for the function in the combined
index.
I think the solution is
to implement the getASTTranslationUnit and my own ModelBuilder.
I tried to implement the
getASTTranslationUnit in this way.
public IASTTranslationUnit getASTTranslationUnit(CodeReader
reader,
IScannerInfo scanInfo,
ICodeReaderFactory fileCreator,
IIndex index, IParserLogService log) throws CoreException
{
System.out.println("PL8Language::getASTTranslationUnit");
final ISourceCodeParser parser= new PL8SourceCodeParser(index);
// Parse
IASTTranslationUnit ast=
parser.parse();
return ast;
}
The parse function of my
SourceCodeParser looks like the following:
public IASTTranslationUnit parse() {
System.out.println("PL8SourceCodeParser::parse");
IASTTranslationUnit result;
//Create a new
TranslationUnit
translationUnit = new
CASTTranslationUnit();
translationUnit.setOffset(0);
translationUnit.setIndex(index);
//Name of the function
char name_str[] = {'A', 'B'};
CASTName
declaratorName = new CASTName(name_str);
//new
SimpleDeclaration
IASTSimpleDeclaration declaration =
new CASTSimpleDeclaration();
IASTStandardFunctionDeclarator declarator = new
CASTFunctionDeclarator(declaratorName);
declaration.addDeclarator(declarator);
CASTSimpleDeclSpecifier declSpec = new
CASTSimpleDeclSpecifier();
declaration.setDeclSpecifier(declSpec);
translationUnit.addDeclaration(declaration);
result = translationUnit;
translationUnit = null;
return result;
}
The goal is to add a function AB to the index. But the current
situation is different. There is no function with the name AB in the index and
at the moment I had no idea what the reason is. The return value of the parse
function is the right one. The return value has the function included.
At the moment I found no other way to
write into the index, which is used for the source code navigation.
I also searched for a solution in the
CDT Wiki in the topic Design. It is clearly explained about the CDT works, but
no explanation how I can implement my idea.
So my question to you, where is my mistake or is it
generally possible to implement my idea?
Is there anything additional I have to do or can you point me to an
example ?
Thank you in
advance!
Kind regards
Michael