This is an insane attempt to share the steps and toolchain to build your own external DSL using ruby. The question has to be "Why?" We know how to build internal DSL's in ruby. However, external DSL's give freedom to design a grammar that is free of idiomatic ruby. That opens up a universe of possibilities. Our history of learning compiler theory is mostly painful, but the tools that exist make this viable. This is a tough talk. Like many tough things, it's laced with equal parts of stupidity.