Unser SD Smart Differencer macht 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 der Radix oder wie Sie Escape-Sequenzen ausdrücken verwirrt!
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 dem Identifizieren eines Bezeichners gemeldet wurde in einem geänderten Block einheitlich umbenannt. Die 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.
Wenn Sie verstehen möchten, wie eine Reihe von Dateien miteinander verwandt sind, akzeptiert unsere SD CloneDR eine sehr große Menge von Dateien und teilt Ihnen mit, 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.
Ist diese Hausaufgabe Plagiatserkennung? Viele Pakete dafür, wenn Sie das suchen. –
Sie können dorthin gelangen, indem Sie das Format der Eingabe normalisieren und dann diffedieren. Das Dienstprogramm "Einzug" ist dafür hervorragend geeignet.Ich kann Ihnen keine Liste mit Optionen von oben geben, aber es kann leere Zeilen verschlingen, Klammerformat und Abstand standardisieren und so weiter. Variablennamen werden sehr viel schwieriger. – Cascabel
Ich nehme an, es könnte für diesen Zweck verwendet werden, aber ich werde es tatsächlich verwenden, um zwei Dateien zu vergleichen, die ich geschrieben habe. Würde es Ihnen etwas ausmachen, die Namen von Plagiatserkennungs-Dienstprogrammen zu posten, mit denen Sie vertraut sind? Vielleicht könnten sie mir helfen. Vielen Dank! –