When a computer does something wrong, you'd like to think that it's because it couldn't figure out what it is you wanted it to do. Alas, sometimes, it knows exactly what you want, and it does something completely different anyway:
buzzword-bingo:~> ^D Use "logout" to logout. buzzword-bingo:~> ^D Use "logout" to logout. buzzword-bingo:~> ^D Use "logout" to logout.
When I log into a new machine and this happens, I ask myself, why would anyone create a command which does nothing at all except tell the user to ask again nicely? Why would a program treat completely unambiguous commands, that it knows how to execute, as errors?
Why do compilers subject programmers to that pedantry?
When you forget the closing brace of a function in a C++ program, the meaning of the program is absolutely totally freakin' different. The compiler gets pretty much everything after the missing brace wrong. But why should a single brace be so world-shatteringly significant to the compiler when a human would still be able to read the program without a problem? Put another way, why does a missing brace make a program 100% less understandable to the compiler when to a human it's closer to 2%?
IDE authors have started adding features to detect this kind of mistake and provide easy, one-click methods to fix them, but this isn't very different from telling the user to type "logout" instead of pressing Ctrl-D.
I think the bigger problem is that compilers expect every character to be in just the right place. They're paying attention to the wrong things. Compilers should accept code which is only correct enough to be unambiguous. If the user's gotten their meaning across, the compiler should try to meet them halfway.
Basically, instead of throwing their hands up in the face of syntax errors, compilers should try to find the program the user was most likely trying to convey:

It's interesting to think about how this would change the experience of programming. What kinds of errors can a compiler ignore? Would we start to make them on purpose for the sake of efficiency? (Judging by how people react to coding standards which aren't enforced by software, the answer is yes.) And even more interesting (to me) is the question, how would programming languages change if they were designed to be imprecise? Would they still look like C?