Railroad Diagram of version range operators
This is a image version of the post here
range-set:
range-set ::= range ( logical-or range )*
logical-or:
logical-or ::= ' '* '||' ' '*
referenced by: range-set
range:
range ::= hyphen
| simple ( ' ' simple )*
| ''
referenced by: range-set
hyphen:
hyphen ::= partial ' - ' partial
referenced by: range
simple:
simple ::= primitive
| partial
| tilde
| caret
referenced by: range
primitive:
primitive ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial
referenced by: simple
partial:
partial ::= xr ( '.' xr ( '.' xr qualifier? )? )?
referenced by:
xr:
xr ::= 'x'
| 'X'
| '*'
| nr
referenced by: partial
nr:
nr ::= '0'
| ['1'-'9] ['0'-'9]*
referenced by:
tilde:
tilde ::= '~' partial
referenced by: simple
caret:
caret ::= '^' partial
referenced by: simple
qualifier:
qualifier ::= ( '-' pre )? ( '+' build )?
referenced by: partial
pre:
pre ::= parts
referenced by: qualifier
build:
build ::= parts
referenced by: qualifier
parts:
parts ::= part ( '.' part )*
referenced by:
part:
part ::= nr | [-0-9A-Za-z]+
generated by RR - Railroad Diagram Generator
Railroad Diagram of version range operators