erynwells.me/content/blog/2022/08/railroad-js/index.md

1.1 KiB

title slug date draft
railroad.js railroad-js 2022-08-20T10:45:53-07:00 true

{{< figures/railroad id="sExpressionDiagram" >}} return rr.Diagram( rr.Start("simple", "s_expression"), rr.ZeroOrMore( rr.Choice(0, rr.Group(rr.Sequence( "a ... z", rr.ZeroOrMore(rr.Choice(0, "a ... z", "1 ... 9")) ), "atom"), rr.Sequence( "(", rr.OneOrMore(rr.NonTerminal("s_expression")), ")" ), rr.Sequence( "(", rr.NonTerminal("s_expression"), ".", rr.NonTerminal("s_expression"), ")" ) ) ) ); {{< /figures/railroad >}}

I just recently integrated support for Tab Atkins' excellent railroad.js. It allows you to make diagrams like the one above. These are great for describing modular architectures, control flow through programs or other complex systems, and—as above—grammars.