I wish the Free Pascal developers would require the semicolon at the end of all statements, or none. Like it is, I don't think FP could be used in a high-production office setting.
A lot of Pascal compilers "tolerate" semicolons where there aren't supposed to be any.
Neither "end" nor "else" are statements (or begin a statement), therefore there should not be a semicolon before them. In the case of "end" the compiler has been "trained" to tolerate them but, in the case of "else" allowing a semicolon would change the semantics, therefore that's a no-go.
You'll get used to semicolons soon enough.
A rare but, much more annoying problem with Pascal's design is the use of "begin"/"end" to mark the beginning and end of function/procedure blocks while also using them as compound statement "delimiters". Combine that with the fact that functions and procedures can be nested and that opens the door to some really annoying problems. For instance
program FunWithBeginEnd;
procedure ProcedureName;
procedure AnotherProcedure; { procedure has no blockbody }
begin { Top to bottom associates with AnotherProcedure, bottom }
end; { to top, associates with ProcedureName. }
begin
begin
end;
end.
When there aren't hundreds of lines of code in the way, it's easy to see the problem but, in a large program it's a different thing. A much more common problem is the "extra" begin or the "missing" end. The compiler gets to the very bottom of the source and "informs" you that it expected a semicolon. If you've made more than a few changes you can still remember then you're in for some fun.