I agree with you. I'd love to have structured editor, grep, diff and patch tools.
Anything with a well-made definition should be doable, like C's BNF. Perl need not apply. :)
I would handle the preprocessor by having the editor (and other tools) handle the preprocessed
code and then replacing it with the macro in the display while retaining the macro definition
in the background. It could be expanded or contracted in the display by a double-click, or
right-click, or a little plus icon.