better variable names
add non terminal naming strategy
add EliminateOptionals namespace