This post is part of the Introduction to parsing series. In the last part we have set up the stage for user defined functions. In this (short) part, we’ll integrate them with our parser. The relevant commit for this post is here. Adapting the grammar At the moment our parser’s grammar (excluding the expressions) looks like this: program: [end-of-line]* [statement end-of-line+]* statement: assignment | expression; assignment: variable '=' expression; The syntax we’re going to allow for o...