Programming languages are an important tool in software engineering. The knowledge and understanding of their implementation are necessary to design, develop and maintain software systems, choosing the appropriate programming language. Knowing the language features and their implementation allows the software engineer to evaluate the performance, efficiency, robustness, reliability, and security of applications. This knowledge is a valuable instrument in the software development process. Moreover, building a language processor constitutes a practical software development project to combine other areas in software engineering such as formal languages, grammars, automata, software architecture and design, programming, operating systems, computer structure, and model-driven development.