use String.sub instead of explode and Array.sub
create sub-structures Abstract and Concrete and moved related functions
moved env arg into local makeAst helper function