What is a compiler? Consider you are given an expression in a high-level programming language, such as '4 * (8 + 1)'. In a compiler, this expression would typically be converted into an abstract syntax tree for further processing. Describe how you would construct an abstract syntax tree for the given expression.