strumenti maggior diff confronto linee, non alberi di sintassi (vedi Wikipedia article for discussion).
Ci sono alcune carte Techical che parlano di come fare albero di sintassi confronta, per esempio, Diff/TS: A Tool for Fine-Grained Structural Change Analysis
ci sono le API per il calcolo delle differenze di alberi disponibili ovunque per quanto ne so. Il problema è più complesso di quanto non sembri, se si vuole ottenere una differenza minima. Ma la tecnica di base è utilizzare alcune varianti di Levenstein distance metrics.
Abbiamo dovuto eseguire il rollover per la nostra linea di SmartDifferencers; fortunatamente, abbiamo molti ottimi front end per molte lingue per produrre AST accurati.
Si ottengono ulteriori sorprese, come le persone che vogliono confrontare i commenti nonostante il fatto che ciò che si possiede sono AST, che vogliono confrontare i file danneggiati, confrontare dialetti della lingua che la grammatica non corrisponde, o codici che contengono inserimenti di altri linguaggi, ecc. La differenza tra le righe non ha questi problemi, che è una ragione per cui diff è diffuso e il diff albero non lo è.
fonte
2011-12-12 14:51:07
E 'facile ottenere la AS T dei file sorgente, è un'altra storia per scoprire le somiglianze tra di loro :). Sui guru del parsing locale qui a StackOverflow, [Ira Baxter] (http://stackoverflow.com/users/120163/ira-baxter), ne parla in un [Google Tech Talk] (http://www.youtube .com/watch? v = C-_dw9iEzhA) dove dice che il suo software fa questo. –
molto vero - dipende da cosa intendi "confrontare". Forse sarebbe meglio definire, AST potrebbe non essere la cosa migliore da usare. –