IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Eclipse Platform Discussion :

Parser CDT : problème avec les macros


Sujet :

Eclipse Platform

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de bpy1401
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2003
    Messages : 511
    Par défaut Parser CDT : problème avec les macros
    Bonjour à tous

    Je parse des fichiers C pour en extraire la liste des variables utilisées dans un code C. Pour cela je parse les fichiers C avec le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    protected void runParser(File currentFile) {
        try {
     
            /* paramètres de configurations du parseur */
            IParserLogService log = new DefaultLogService();
            CodeReader reader = new CodeReader(currentFile.getAbsolutePath());
            ICodeReaderFactory readerFactory = new CodeReaderFactory();
            IScannerInfo info = new ScannerInfo();
            try {
     
                /* Creation du parseur */
                IScanner scanner = new CPreprocessor(reader, info, ParserLanguage.C, new NullLogService(),new ScannerExtensionConfiguration(),readerFactory);
                ISourceCodeParser parser = new GNUCSourceParser(scanner, ParserMode.COMPLETE_PARSE, new NullLogService(), GCCParserExtensionConfiguration.getInstance(), null);
                IASTTranslationUnit translationUnit = parser.parse();   
     
                /* lancement du traitement du fichier C */
                runChecker(translationUnit);
            } catch (Exception e) {
                e.printStackTrace();
            }
     
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    Tout fonctionne bien sauf dans un cas, celui ou un bout de code est défini par une macro

    je m'explique:

    Mon code contient des macros du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #define setVar_var1(value)     var1=value;
    #define setVar_var2(value)     functionSet(value)
     
    unsigned char var1;
    extern void functionSet(unsigned char val);
     
    int main(void)
    {
       setVar_var1(10);
       setVar_var2(10);
       return 0;
    }
    L'assignation se fait soit par un assignation directe dans la mémoire soit par l'intermédiaire d'une fonction.

    Quand je parse le fichier, dans le cas de Var1 , cela me renvoie bien un CASTBinaryExpression tandis que dans le cas var2 j'obtiens un CASTFunctionCallExpression. j'ai donc bien parsé un fichier preprocessés.
    Le CASTBinaryExpression est constitué de deux CASTIdExpression op1 et op2.

    Dans mon cas op1 devrait valoir "var1" et op2 "10", mais je obtiens pour op1 et op2 la valeur "setVar_va1(10)", donc la ligne de code avant preprocessing.

    Comment puis-je faire pour contourner ce problème ?

    Cordialement
    Page sur Developpez : http://pbriand.developpez.com

  2. #2
    Membre émérite
    Avatar de bpy1401
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2003
    Messages : 511
    Par défaut
    J'ai pu trouver la solution.

    Il faut utiliser getName plutôt que getRawSignature.
    Page sur Developpez : http://pbriand.developpez.com

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] problème avec les macros vba
    Par jess59 dans le forum Excel
    Réponses: 6
    Dernier message: 27/05/2009, 13h28
  2. [Macro] [Débutant] Problème avec les Indice colonne
    Par BenoitM dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/11/2008, 11h30
  3. Réponses: 2
    Dernier message: 07/08/2008, 08h24
  4. Problème avec les macro supplementaires
    Par ririrourou dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 02/07/2008, 16h31
  5. Problème avec les macros _RPT et _RPTF
    Par pikatshu dans le forum C++Builder
    Réponses: 0
    Dernier message: 12/11/2007, 12h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo