Compilers typically collect all the variables declared in a block and
move them all in one place, renaming them appropriately everywhere to
avoid name conflicts.  Consequently, they do not like you to declare a
variable twice in the same block.  Modify the static semantics of
SIMPLE to reject programs which declare the same variable twice in a
block.  Your resulting type system should get stuck when a variable is
declared the second time.

Note that the existing static semantics of SIMPLE already checks that
global variables are not redeclared.  Also, there is no distinction
between array variables and other variables, so you cannot declare
an integer variable and a vector variable with the same name.
Finally, function parameters are considered outside the block defining
the function body, so you are allowed to declare a variable in the
function body having the same name as a function parameter.  Similarly
for the parameter of catch.

Note to instructor: This exercise also makes sense for IMP++.  It may
be instructive to also propose it as an exercise in the K tutorial for
IMP++.
