The reason that the current syntax is the way that it is is to avoid having to deal with the dangling-else problem. The grammar that cadet1620 proposed is ambiguous and his test didn't test for the ambiguous case.
Consider the following:
c = 0
if (a = 10)
if (b = 20)
c = 100
else
c = 200
If a = 10 and b = 30, what should c be at the end?
if a = 50 and b = 30, what should c be at the end?
Now how about this:
c = 0
if (a = 10)
if (b = 20)
c = 100
else
c = 200
Same questions.
If your compiler doesn't produce the same answer for both cases, then your compiler is ambiguous because these are the exact same code snippets (since Jack ignores indentation).
Most languages adopt the convention that an else-clause is matched to the structurally nearest unmatched if-statement. The grammar to enforce this convention is more complicated and harder for students at the level of the target audience to grasp.