This course discusses the design and
implementation of programming languages as software tools of value to all design engineers, not merely to compiler vendors. Topics include interpreters, assemblers, loaders, linkers, and compilers. It considers characteristics of languages from the standpoint of trade-offs between expressive functionality, implementation difficulty, and runtime efficiency. It presents tools for assisting language design and for automating
implementation and compiler generation.