use language constructs where possible
create a uniform way to create abstract syntax mode
introduce visitor pattern
toString of program should show source
create rudimentary crossover function