Languages have been fundamental to human communication and a major differentiating factor among various living species. They have been a bridge between organisms, a medium for thought exchange and continuously making communication possible. Computers come with their own model of making things happen, and for very long, programming languages have been the medium to tell computers what has to happen.

In the world of language synthesis — which is understanding text and making sense out of it, there are two major ideas: a compiler and an interpreter. These tools often feel like magic from the outside. Almost every programmer begins their journey by interacting with some form of a compiler or an interpreter. The end goal for these tools is the same though: translation.

Compilers

A compiler is a tool for optimised translation. It converts a program from one language to another, while making changes to ensure correctness, efficient resource usage and good performance. Traditionally, compilers have helped in translating human-readable language programs to something that computers can understand.

Interpreters

While compilers translate, an interpreter interprets and executes the source program. The language in which the interpreter is written is called the runtime language. Interpreters are often easier and faster to use that compilers and see extensive usage in scripting languages.

In this course

This language synthesis course will focus on building a compiler from scratch for our language Gom.