2017-11-16 3 views

Antwort

0

Ich bin mir nicht sicher, wie VisitorUtil funktioniert (es ist nicht aus dem CDT-Code), aber ich nehme an, es gibt Ihnen eine Möglichkeit, auf den gefundenen Knoten zuzugreifen. Also:

  • Angesichts der IASTExpressionStatement Knoten, der gefunden wurde, verwenden Sie IASTExpression.getExpression() die enthaltenen Ausdruck zu erhalten.

  • Sehen Sie, wenn es ein IASTBinaryExpression ist, und das ist getOperator() ist IASTBinaryExpression.op_assign.

  • Verwenden Sie IASTBinaryExpression.getOperand1(), um den linken Teilausdruck des Zuweisungsausdrucks abzurufen. Überprüfen Sie, ob es sich um eine IASTIdExpression handelt, und holen Sie sich die Variable, die sie nennt, über IASTIdExpression.getName().

  • Jetzt, da Sie den Namen haben, verwenden Sie IASTName.resolveBinding(), um die Bindung der Variablen zu erhalten. Dies ist die Repräsentation der Variablen im semantischen Programmmodell.

  • der Variablendefinition zu finden, verwenden Sie IASTTranslationUnit.getDefinitionsInAST(IBinding), wenn Sie es in der aktuellen Datei suchen möchten, oder IASTTranslationUnit.getDefinitions(IBinding), wenn Sie es möchten auch in enthalten Header-Dateien suchen (letztere das Projekt indiziert werden müssen). Die IASTTranslationUnit kann von jedem IASTNode über IASTNode.getTranslationUnit() erhalten werden.

+0

Ich habe dies vorher getan, aber ich brauche die Erklärung Spezifizierer für den Namen zu erhalten, für das obige Beispiel I (int) –

+0

@MostafaHassan Unter der Annahme der Erklärung zurückkehren will, ist in der gleichen Datei, 'getDefinitionInAST () 'wird dir einen'IASTName' geben. Sie können den umgebenden AST untersuchen, um die Deklarationsspezifizierer zu finden. Zum Beispiel wäre der Elternname des Namens ein 'IAstDeclarator', sein Elternteil eine 'IASTSimpleDeclaration', und dann können Sie' IASTSimpleDeclaration.getDeclSpecifier() 'verwenden, um den Deklarationsspezifizierer zu erhalten. – HighCommander4

+0

Perfekt, ich habe es geschafft, es laufen zu lassen –