> If the problem is a misspelled or out of scope identifier, the parser should should still be able to parse the program
That's not necessarily true for all languages. For example, in C, "(e1)&e2" is parsed differently depending on how e1 is declared. If e1 is declared as
typedef int* e1;
then the "&" in "(e1)&e2" is parsed as the address-of operator, but if e1 is declared as int e1;
then "(e1)&e2" is parsed as a bitwise AND.