"It has been long known that Two-Level Grammars (also known as Van Wijngaarden Grammars) can be used not only to define the syntax but also the semantics of programming languages. Here we give a quick introduction to the grammars and how they can be used to define the semantics of a programming language, and then present a technique for making those definitions executable."
Learn how to set up LanguageTool, a private and offline grammar checker, using Docker.