| 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 ::= prepart ( '.' prepart ) * |
| prepart ::= nr | alphanumid |
| build ::= buildid ( '.' buildid ) * |
| alphanumid ::= ( [0-9] ) * [A-Za-z-] [-0-9A-Za-z] * |
| buildid ::= [-0-9A-Za-z]+ |