vastly simplify semantic checking with symbol table