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?

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



Back to the top