The SD Smart Differencer is a family of comparison tools that compares individual files according to the the language syntax of the file, using the program syntax. This means it ignores language-defined whitespact and language-defined comments. It will match files with different formatting if they contain the same code.
Where there are differences, they are reported in language terms, e.g., expressions, statements, blocks, ... and in terms of editing actions that a programmer might reasonably do (move, delete, insert, copy, rename).
Because macros and preprocessor directives tend to be used abusively in raw C files (ruining the apparant program structure as seen by the language grammar), it does not
operate as well on C files as one would like. It does quite well with files that do not have, or have little preprocessing, such as C++, C#, Java, COBOL, Python, ...
It doesn't compare file folders, just individual pairs of files. Not open source.