Over the weekend, I realised, extremely belatedly, that the expression language I designed for my free-spigot has a grammar bug. Specifically, it's a context-typedef bug: the same expression can parse differently depending on whether a given identifier is currently defined to be a function or a variable, which means that you need to do your scope analysis in sync with the parse, so that you can know what set of definitions is currently in scope for the subexpression you're currently looking at.