add topo sort algorithm
use symbol table for identifiers
topo sort of definitions