Wie vergleichen Sie zwei Dateien, die C-Code enthalten, basierend auf der Codestruktur, nicht nur auf Textunterschiede?

8

Ich habe zwei Dateien, die C-Code enthalten, den ich vergleichen möchte. Ich suche nach einem Dienstprogramm, das für jede Datei einen Syntaxbaum erstellt und die Syntaxbäume vergleicht, anstatt nur den Text der Dateien zu vergleichen. Auf diese Weise werden kleinere Unterschiede in Formatierung und Stil ignoriert. Es wäre schön, dem Vergleichswerkzeug sogar zu sagen, dass es Unterschiede wie Variablennamen usw. ignorieren kann.

Korrigiere mich, wenn ich falsch liege, aber diff hat diese Fähigkeit nicht. Ich bin ein Ubuntu-Benutzer. Danke!

    
Corey Jeffco 07.11.2010, 05:20
quelle

2 Antworten

2

Unser SD Smart Diffferen erledigt genau das, was Sie wollen. Es verwendet Parser in Compiler-Qualität, um Quellcode zu lesen und ASTs für zwei ausgewählte Dateien zu erstellen. Es vergleicht dann die Bäume, die durch die Syntax geleitet werden, so dass es nicht durch Leerzeichen, Layout oder Kommentare verwirrt wird. Weil es die Werte von Konstanten normalisiert, wird es nicht durch die Änderung von Radix oder wie Sie Escape-Sequenzen ausdrücken verwechselt!

Die Deltas werden auf der Ebene der Sprachkonstrukte (Variable, Ausdruck, Anweisung, Deklaration, Funktion, ...) in Bezug auf die Absicht des Programmierers (Löschen, Einfügen, Kopieren, Verschieben) mit der Feststellung, dass ein Bezeichner vorliegt, gemeldet wurde durchgängig in einem geänderten Block umbenannt.

Der SmartDifferencer hat Versionen für C (in einer Reihe von Dialekten; wenn Sie Compiler-genaue Parsen, der langauge Dialekt zählt) war gut für C ++, Java, C #, JavaScript, COBOL, Python und viele andere Sprachen / p>

Wenn Sie verstehen möchten, wie eine Reihe von Dateien zueinander in Beziehung stehen, akzeptiert unsere SD CloneDR ein sehr große Menge von Dateien und sagen Ihnen, was sie gemeinsam haben. Es findet Code, der über den gesamten Satz hinweg kopiert und eingefügt wurde. Sie müssen ihm nicht sagen, wonach er suchen soll; es findet es automatisch. Mit ASTs (wie oben) wird es nicht durch Leerzeichen Änderungen oder Umbenennungen von Bezeichnern getäuscht. Auf der Website gibt es eine Reihe von Beispiel-Clone-Erkennungsberichten für verschiedene Sprachen.

    
Ira Baxter 07.11.2010 18:53
quelle
2

Es gibt ein Programm namens codeCompare von devart ( Ссылка ), das die folgende Funktion enthält (ich weiß es ist nicht genau das, was Sie gefragt haben, aber wahrscheinlich kann es dafür verwendet werden.)

Das Feature heißt "Strukturvergleich"

  

Mit dieser Funktionalität können Sie verschiedene Dateirevisionen anhand der Strukturblöcke (Klassen, Felder, Methoden) vergleichen. Dabei werden verschiedene Versionen der gleichen Datei unabhängig von ihrem Ziel verglichen.

     

Der Strukturvergleich kann auf die folgenden Sprachen angewendet werden:

     
  • C #
  •   
  • C ++
  •   
  • Visual Basic
  •   
  • JavaScript
  •   

(Ich weiß, dass es C nicht enthält, aber vielleicht mit der C ++ - Version können Sie das Problem lösen)

    
mariana soffer 07.11.2010 06:29
quelle

Tags und Links