1 range-set ::= range ( logical-or range ) *
2 logical-or ::= ( ' ' ) * '||' ( ' ' ) *
3 range ::= hyphen | simple ( ' ' simple ) * | ''
4 hyphen ::= partial ' - ' partial
5 simple ::= primitive | partial | tilde | caret
6 primitive ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial
7 partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )?
8 xr ::= 'x' | 'X' | '*' | nr
9 nr ::= '0' | [1-9] ( [0-9] ) *
12 qualifier ::= ( '-' pre )? ( '+' build )?
15 parts ::= part ( '.' part ) *
16 part ::= nr | [-0-9A-Za-z]+