I haven’t given a purely formal description of our example module selection language. We’ll see how to do that later. Hopefully I have described it in enough detail that you can recognise which statements are grammatically correct and which, like “Probability Statistics ) ∧ ∨ ( Geometry ¬” are not grammatically correct, even though they are built from the same pieces. You can probably also mentally parse grammatically correct statements, at least if they’re not too long and complicated. Whether you could write a parser for it is another matter. We have a certain level of parsing built in which is how even very small children can learn languages, but this process is mostly subconscious, which is why it’s hard to write a parser even for a language we would have no trouble parsing intuitively.
I’m not going to construct a parser for the module enrollment language described above. I could, but it would be quite complicated despite the apparent simplicity of the language. It would also be largely pointless, for reasons I’ll explain soon. I will describe a parser for a closely related language though.