range-set ::= range ( logical-or range ) * | |
logical-or ::= ( ' ' ) * '||' ( ' ' ) * | |
range ::= hyphen | simple ( ' ' simple ) * | '' | |
hyphen ::= partial ' - ' partial | |
simple ::= primitive | partial | tilde | caret | |
primitive ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial | |
partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )? | |
xr ::= 'x' | 'X' | '*' | nr | |
nr ::= '0' | [1-9] ( [0-9] ) * | |
tilde ::= '~' partial | |
caret ::= '^' partial | |
qualifier ::= ( '-' pre )? ( '+' build )? | |
pre ::= parts | |
build ::= parts | |
parts ::= part ( '.' part ) * | |
part ::= nr | [-0-9A-Za-z]+ | |