JSON object

This diagram is composed directly from terminals, nonterminals, an optional branch, and a comma-separated repetition.

Railroad diagram for a JSON object
const value = alternatives(
  terminal("null"), terminal("true"), terminal("false"),
  nonterminal("number"), nonterminal("string"),
);
const member = sequence(nonterminal("string"), terminal(":"), value);
const object = sequence(
  terminal("{"),
  optional(zeroOrMore(member, terminal(","))),
  terminal("}"),
);

renderSvg(object, {width: 520});