Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
RE: [cdt-dev] Using CDT to parse C++ macros?

The preprocessor statements are not part of the AST-Tree, however you can obtain them via IASTTranslationUnit.getAllPreprocessorStatements().

Markus.

> -----Original Message-----
> From: cdt-dev-bounces@xxxxxxxxxxx 
> [mailto:cdt-dev-bounces@xxxxxxxxxxx] On Behalf Of Diego Abia GutiƩrrez
> Sent: Monday, January 28, 2008 7:05 PM
> To: cdt-dev@xxxxxxxxxxx
> Subject: Re: [cdt-dev] Using CDT to parse C++ macros?
> Importance: Low
> 
> 
> Sorry, I did a mistake in the previous message. There is an 
> IASTPreprocessorStatement interface but not a visit method 
> for IASTPreprocessorStatement in ASTVisitor Interface. 
> 
> --------- Mensage Original --------
> De: CDT General developers list. <cdt-dev@xxxxxxxxxxx>
> Para: cdt-dev@xxxxxxxxxxx <cdt-dev@xxxxxxxxxxx>
> Asunto: [cdt-dev] Using CDT to parse C++ macros?
> Fecha: 28/01/08 17:04
> 
> > 
> > 
> > Hi all,
> > 
> > Searching into mailing lists, I found this message 
> > http://dev.eclipse.org/mhonarc/lists/cdt-dev/msg10285.html which 
> > explains
> how
> > to use CDT parser as a stand-alone module:
> > 
> > import java.util.HashMap;
> > import java.util.Map;
> > 
> > import org.eclipse.cdt.core.dom.ICodeReaderFactory;
> > import org.eclipse.cdt.core.dom.ast.ASTVisitor;
> > import org.eclipse.cdt.core.dom.ast.IASTName;
> > import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
> > import org.eclipse.cdt.core.dom.ast.gnu.cpp.GPPLanguage;
> > import org.eclipse.cdt.core.parser.CodeReader;
> > import org.eclipse.cdt.core.parser.DefaultLogService;
> > import org.eclipse.cdt.core.parser.IParserLogService;
> > import org.eclipse.cdt.core.parser.IScannerInfo;
> > import org.eclipse.cdt.core.parser.ScannerInfo;
> > import
> org.eclipse.cdt.internal.core.parser.scanner2.FileCodeReaderFactory;
> > 
> > 
> > public class ParserExample {
> >      public static void main(String[] args) throws Exception {
> >            IParserLogService log = new DefaultLogService();
> > 
> >            String code = &quot;class Class { public: int 
> x,y; Class(); 
> > ~Class(); private: Class f(); }; int function(double parameter) { 
> > return parameter; };&quot;;
> >            CodeReader reader = new CodeReader(code.toCharArray());
> >            Map definedSymbols = new HashMap();
> >            String[] includePaths = new String[0];
> >            IScannerInfo info = new ScannerInfo(definedSymbols, 
> > includePaths);
> >            ICodeReaderFactory readerFactory = 
> > FileCodeReaderFactory.getInstance();
> > 
> >            IASTTranslationUnit translationUnit = 
> > GPPLanguage.getDefault().getASTTranslationUnit(reader, info,
> readerFactory,
> > null, log);
> > 
> >            ASTVisitor visitor = new ASTVisitor() {
> >                  public int visit(IASTName name) {
> >                        System.out.println(name.getRawSignature());
> >                        return ASTVisitor.PROCESS_CONTINUE;
> >                  }
> >            };
> >            visitor.shouldVisitNames = true;
> >            translationUnit.accept(visitor);
> >      }
> > }
> > 
> > I would like to to parse C++ macros such as: #define N 7, #define
> ADD_FIVE(a)
> > (a) + 5, #define getmax(a,b) a&gt;b?a:b ... Is this 
> possible using CDT
> parser? or
> > I have to preprocess source files before doing it?
> > 
> > Browsing source code I found a visit method for macro statements in 
> > ASTVitor.class in org.eclipse.cdt.core.dom.ast package - public int 
> > visit(IASTPreprocessorStatement PreprocessorStatement) -,  so, I 
> > think, it could be possible to collect macro information from AST 
> > using this method
> but
> > I don't know how to configure the parser to do it. Could 
> you help me?
> > 
> > Regards
> > _______________________________________________
> > cdt-dev mailing list
> > cdt-dev@xxxxxxxxxxx
> > https://dev.eclipse.org/mailman/listinfo/cdt-dev
> > 
> > 
> > 
> 
> ________________________________________________________________
> Mensaje enviado usando TEISA Webmail 1.2.0-beta1
> 
> _______________________________________________
> cdt-dev mailing list
> cdt-dev@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/cdt-dev
> 


Back to the top