Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
RE: [cdt-dev] org.eclipse.cdt.core.dom.parser.c

That's right Helko. 
I also need all function names, I tried to do: 
IParserLogService log = new DefaultLogService();
String codeString = "";
/*******   Take a c source file  ********/
File file = new File("Y:\\IFX_Tools\\Plugin_Eclipse\\workspace\\ParserCDT\\src\\CFile.c");
    FileInputStream fis = null;
    BufferedInputStream bis = null;
    DataInputStream dis = null;

    try {
      fis = new FileInputStream(file);
      bis = new BufferedInputStream(fis);
      dis = new DataInputStream(bis);

      while (dis.available() != 0) {
     codeString = codeString.concat(dis.readLine());
      }
      fis.close();
      bis.close();
      dis.close();

    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }

char[] code = codeString.toCharArray();
CodeReader reader = new CodeReader(code);
Map definedSymbols = new HashMap();
String[] includePaths = new String[0];//{"#include <stdio.h>"};
IScannerInfo info = new ScannerInfo(definedSymbols, includePaths);
ICodeReaderFactory readerFactory = FileCodeReaderFactory.getInstance();
IASTTranslationUnit translationUnit = GCCLanguage.getDefault().getASTTranslationUnit(reader, info, readerFactory, null, log); 
// Function name
for (IASTDeclaration declaration : translationUnit.getDeclarations()){
if( declaration instanceof IASTFunctionDefinition){
System.out.println(((IASTFunctionDefinition) declaration).getDeclarator().getName());
}
}
// comments
for (IASTComment com :translationUnit.getComments()){
System.out.println(com.toString());
}
I got only the comments this time. No declarations, what's wrong?
CFile.c
#include <stdio.h>
#include <stdlib.h>
/* Documentation function 1*/
int function1(int a){
 printf("This is function 1");
 return 0;
}

/*Documentation function main*/
int main(void) {
puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
function1(0);
return EXIT_SUCCESS;
}
> From: glathe.helko@xxxxxxxxxxxxxx
> Date: Wed, 18 Aug 2010 11:42:39 +0200
> Subject: Re: [cdt-dev] org.eclipse.cdt.core.dom.parser.c
> To: cdt-dev@xxxxxxxxxxx
>
> Hello Flo,
>
> I think that your C Source Code example is invalid.
> The part "//*doc2*//" is not one block comment, but instead it is a
> single line comment. The closing curly bracket "}" of your C function
> ist also included in this single line comment, because your posted
> code does not include any linebreaks. Thus, replace your "//" through
> a single "/" to get a block comment and try your code again.
>
> Cheers, Helko
>
> Sincerely,
>
> Helko Glathe
>
>
>
> 2010/8/18 Flo Menier <josieenfrance@xxxxxxxxxxx>:
> > Thanks Helko. I tried to do what you said:
> > public static void main(String[] args) throws Exception {
> > IParserLogService log = new DefaultLogService();
> > String codeString = "int function(int toto){int a;/*doc0*/ char b;/*doc1*/
> > return toto+a; //*doc2*//}";
> > char[] code = codeString.toCharArray();
> > CodeReader reader = new CodeReader(code);
> > Map definedSymbols = new HashMap();
> > String[] includePaths = new String[0];
> > IScannerInfo info = new ScannerInfo(definedSymbols, includePaths);
> > ICodeReaderFactory readerFactory = FileCodeReaderFactory.getInstance();
> > IASTTranslationUnit translationUnit
> > =GCCLanguage.getDefault().getASTTranslationUnit(reader, info, readerFactory,
> > null, log);
> > for (IASTComment com :translationUnit.getComments()){
> > System.out.println(com.getComment().toString());
> > }
> > I got nothing printed in console. getComments() gave me a IASTComment[10],
> > value is null for all 10 IASComment?
> >> From: glathe.helko@xxxxxxxxxxxxxx
> >> Date: Wed, 18 Aug 2010 00:41:38 +0200
> >> Subject: Re: [cdt-dev] org.eclipse.cdt.core.dom.parser.c
> >> To: cdt-dev@xxxxxxxxxxx
> >>
> >> Hello,
> >>
> >> have a look at the CVS repository:
> >>
> >> " 1. Connect to CVS repository:
> >> :pserver:anonymous@xxxxxxxxxxxxxxx:2401/cvsroot/tools (Or
> >> :pserver:anonymous@xxxxxxxxxxxxxxxxx:80/cvsroot/tools from behind
> >> corporate firewall)
> >> 2. Check out: org.eclipse.cdt/all "
> >>
> >> Underneath of "all" you will find the folder "org.eclipse.cdt.core".
> >> Inside their is a subfolder for the "parser" where you can find the
> >> source code.
> >>
> >>
> >> But I think you can access Block Comments right know using the AST of
> >> the C Source Code. The IASTTranslationUnit provides a method for
> >> getting all comments (getComments()). This Method returns an Array of
> >> IASTComment's. And IASTComment provides a to determine whether it is a
> >> block comment or not (see IASTComment.isBlockComment()).
> >>
> >> Cheers, Helko
> >>
> >>
> >>
> >> Sincerely,
> >>
> >> Helko Glathe
> >>
> >>
> >>
> >> 2010/8/17 Flo Menier <josieenfrance@xxxxxxxxxxx>:
> >> > Can someone tell me where I can download the code source
> >> > of org.eclipse.cdt.core.dom.parser.c,
> >> > and org.eclipse.cdt.internal.core.parser.scanner? I want to understand
> >> > how
> >> > lexer works in CDT? I want to get block comments in a C source file
> >> > instead
> >> > of ignorer them.
> >> > Thanks a lot
> >> > _______________________________________________
> >> > cdt-dev mailing list
> >> > cdt-dev@xxxxxxxxxxx
> >> > https://dev.eclipse.org/mailman/listinfo/cdt-dev
> >> >
> >> >
> >> _______________________________________________
> >> cdt-dev mailing list
> >> cdt-dev@xxxxxxxxxxx
> >> https://dev.eclipse.org/mailman/listinfo/cdt-dev
> >
> > _______________________________________________
> > cdt-dev mailing list
> > cdt-dev@xxxxxxxxxxx
> > https://dev.eclipse.org/mailman/listinfo/cdt-dev
> >
> >
> _______________________________________________
> cdt-dev mailing list
> cdt-dev@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/cdt-dev

Back to the top