# Grammars

## Synopsis

We have talked a lot at this point how to manipulate abstract syntax trees to interpret a computer program. But how do we generate those abstract syntax trees in the first place? We start off with a mathematical description of a language --- or more accurately, a mathematical description of the valid sentences of a language --- and use that to build a tool to build a parser.

This “mathematical description” is called a *grammar*, and there are a lot of things
you will need to understand about them to make them useful to you.