factored out the '|' symbol at top level
factored out [opt,rep,orp] and started on [lit,sub]