Recursive-descent parser with error recovery: a malformed statement is reported and skipped, and parsing continues, so one pass reports every error in the file.