11cb0ef41Sopenharmony_cirange-set  ::= range ( logical-or range ) *
21cb0ef41Sopenharmony_cilogical-or ::= ( ' ' ) * '||' ( ' ' ) *
31cb0ef41Sopenharmony_cirange      ::= hyphen | simple ( ' ' simple ) * | ''
41cb0ef41Sopenharmony_cihyphen     ::= partial ' - ' partial
51cb0ef41Sopenharmony_cisimple     ::= primitive | partial | tilde | caret
61cb0ef41Sopenharmony_ciprimitive  ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial
71cb0ef41Sopenharmony_cipartial    ::= xr ( '.' xr ( '.' xr qualifier ? )? )?
81cb0ef41Sopenharmony_cixr         ::= 'x' | 'X' | '*' | nr
91cb0ef41Sopenharmony_cinr         ::= '0' | [1-9] ( [0-9] ) *
101cb0ef41Sopenharmony_citilde      ::= '~' partial
111cb0ef41Sopenharmony_cicaret      ::= '^' partial
121cb0ef41Sopenharmony_ciqualifier  ::= ( '-' pre )? ( '+' build )?
131cb0ef41Sopenharmony_cipre        ::= parts
141cb0ef41Sopenharmony_cibuild      ::= parts
151cb0ef41Sopenharmony_ciparts      ::= part ( '.' part ) *
161cb0ef41Sopenharmony_cipart       ::= nr | [-0-9A-Za-z]+
17