Q1: What if there are several methods named main in the code,
some are static, some are not, some have the right signature some not.
A1: You only care about static methods that have the exact signature -
ones thay accepts one argument of type string[] (the name
of the argument is not important) and return void. Any
method that does not match these criteria is not a main method.
The code must have exactly one main method.
Q2: What do you mean by "verify that the library class has the correct name?"
A2: You compiler should parse libic.sig (either in the current library or in the
path specified by -L), using the library parser. When you parse that file you should
get an AST where the root node is a class node. Each class node know the name of the
class (by a string). Just check that the string equals("Library"),
which is what we expect to have in libic.sig.