When I started my DSL talk for los officiea, I was looking around for neat DSL things to add when I found Irony. I found it at a Lang.NET talk. Then I wrote a small DSL to define some geometric circles. So, here’s a quick rundown of how I made it happen.
Irony is used to define a parser. Inside the parser’s constructor, we build the BNF tree that describes the grammar. When that’s done, Irony will spit out an Abstract Syntax Tree (AST) that we can use for “real work”. Let’s take a look at some of the grammar, before we see the Parser code.
program <- shape +
shape <- circle | polygon | rectangle
circle <- circle point radius number
point <- [ number , number ]
What this looks like is the program ‘circle [100, 150] radius 35’. It gives me circle with a center and a radius. What’s that look like in C#? Or at least the circle bit?
Continue Reading »