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