,
Clément Pit-Claudel
Creative Commons Attribution 4.0 International license
Railroad diagrams (also called "syntax diagrams") are a common, intuitive visualization of grammars, but limited tooling and a lack of formal attention to their layout mostly confines them to hand-drawn documentation. We present the first formal treatment of railroad diagram layout along with a principled, practical implementation. We characterize the problem as compiling a diagram language (specifying conceptual components and how they connect and compose) to a layout language (specifying basic graphical shapes and their sizes and positions). We then implement a compiler that performs line wrapping to meet a target width, as well as vertical alignment and horizontal justification per user-specified policies. We frame line wrapping as optimization, where we describe principled dimensions of optimality and implement corresponding heuristics. For front-end evaluation, we show that our diagram language is well-suited for common applications by describing how regular expressions and Backus-Naur form can be compiled to it. For back-end evaluation, we argue that our compiler is practical by comparing its output to diagrams laid out by hand and by other tools.
@InProceedings{chiplunkar_et_al:LIPIcs.ECOOP.2026.2,
author = {Chiplunkar, Shardul and Pit-Claudel, Cl\'{e}ment},
title = {{Automatic Layout of Railroad Diagrams}},
booktitle = {40th European Conference on Object-Oriented Programming (ECOOP 2026)},
pages = {2:1--2:31},
series = {Leibniz International Proceedings in Informatics (LIPIcs)},
ISBN = {978-3-95977-423-9},
ISSN = {1868-8969},
year = {2026},
volume = {372},
editor = {Krebbers, Robbert and Silva, Alexandra},
publisher = {Schloss Dagstuhl -- Leibniz-Zentrum f{\"u}r Informatik},
address = {Dagstuhl, Germany},
URL = {https://drops.dagstuhl.de/entities/document/10.4230/LIPIcs.ECOOP.2026.2},
URN = {urn:nbn:de:0030-drops-260982},
doi = {10.4230/LIPIcs.ECOOP.2026.2},
annote = {Keywords: syntax diagram, graph layout, line wrapping, pretty-printing}
}