For the compiler writer:
Scanner and parser generators exist and are normally used.
Based on formalisms including: