Regarding syntax, I think there are too many weird character combinations (:., ==:, etc) like these:
ex.head == :. && return union!(sym,[ex])
start = ex.head==:(call) ? 2 : 1
Also I don't like |> combination because it is hard to type. Why not use just single pipe character.