Railroad diagram demos

railroad-diagram
digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
    

railroad-diagram
title "Identifier Grammar"

identifier = letter ( letter | digit | "_" )* ;
letter = "a" | "b" | "c" | "d" | "e" ;
digit = "0" | "1" | "2" ;
    

railroad-diagram
title "Optional Sign"

sign = "+" | "-" ;
number = sign? digit+ ;
digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
    

railroad-diagram
title "Expression Grammar"

expression = term ( ( "+" | "-" ) term )* ;
term = factor ( ( "*" | "/" ) factor )* ;
factor = number | "(" expression ")" ;
number = digit+ ;
digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
    

railroad-diagram
title "JSON Grammar"

json = element ;
element = object | array | string | number | "true" | "false" | "null" ;
object = "{" [ member ( "," member )* ] "}" ;
array = "[" [ element ( "," element )* ] "]" ;
member = string ":" element ;
    

railroad-diagram
title "URL Grammar"

url = protocol "://" domain path? ;
protocol = "http" | "https" | "ftp" ;
domain = label ( "." label )* ;
label = letter ( letter | digit | "-" )* ;
path = "/" segment ( "/" segment )* ;
    

railroad-diagram
title "ISO Style Notation"

list = "[" element { "," element } "]" ;
element = number | string ;
number = digit { digit } ;
digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
    

railroad-diagram
title "BNF Style Definition"

rule ::= "A" | "B" ;
another ::= rule+ ;