diff --git a/pep-0508.txt b/pep-0508.txt index 87bee98b7b4..381d497def7 100644 --- a/pep-0508.txt +++ b/pep-0508.txt @@ -85,7 +85,7 @@ included at the end of the PEP. Versions may be specified according to the PEP-440 [#pep440]_ rules. (Note: URI is defined in std-66 [#std66]_):: - version_cmp = wsp* '<' | '<=' | '!=' | '==' | '>=' | '>' | '~=' | '===' + version_cmp = wsp* '<=' | '<' | '!=' | '==' | '>=' | '>' | '~=' | '===' version = wsp* ( letterOrDigit | '-' | '_' | '.' | '*' | '+' | '!' )+ version_one = version_cmp version wsp* version_many = version_one (wsp* ',' version_one)* @@ -355,48 +355,48 @@ Complete Grammar The complete parsley grammar:: - wsp = ' ' | '\t' - version_cmp = wsp* <'<=' | '<' | '!=' | '==' | '>=' | '>' | '~=' | '==='> - version = wsp* <( letterOrDigit | '-' | '_' | '.' | '*' | '+' | '!' )+> - version_one = version_cmp:op version:v wsp* -> (op, v) - version_many = version_one:v1 (wsp* ',' version_one)*:v2 -> [v1] + v2 - versionspec = ('(' version_many:v ')' ->v) | version_many - urlspec = '@' wsp* - marker_op = version_cmp | (wsp* 'in') | (wsp* 'not' wsp+ 'in') - python_str_c = (wsp | letter | digit | '(' | ')' | '.' | '{' | '}' | - '-' | '_' | '*' | '#' | ':' | ';' | ',' | '/' | '?' | - '[' | ']' | '!' | '~' | '`' | '@' | '$' | '%' | '^' | - '&' | '=' | '+' | '|' | '<' | '>' ) - dquote = '"' - squote = '\\'' - python_str = (squote <(python_str_c | dquote)*>:s squote | - dquote <(python_str_c | squote)*>:s dquote) -> s - env_var = ('python_version' | 'python_full_version' | - 'os_name' | 'sys_platform' | 'platform_release' | - 'platform_system' | 'platform_version' | - 'platform_machine' | 'platform_python_implementation' | - 'implementation_name' | 'implementation_version' | - 'extra' # ONLY when defined by a containing layer - ):varname -> lookup(varname) - marker_var = wsp* (env_var | python_str) - marker_expr = marker_var:l marker_op:o marker_var:r -> (o, l, r) - | wsp* '(' marker:m wsp* ')' -> m - marker_and = marker_expr:l wsp* 'and' marker_expr:r -> ('and', l, r) - | marker_expr:m -> m - marker_or = marker_and:l wsp* 'or' marker_and:r -> ('or', l, r) - | marker_and:m -> m - marker = marker_or - quoted_marker = ';' wsp* marker - identifer_end = letterOrDigit | (('-' | '_' | '.' )* letterOrDigit) - identifier = < letterOrDigit identifier_end* > - name = identifier - extras_list = identifier:i (wsp* ',' wsp* identifier)*:ids -> [i] + ids - extras = '[' wsp* extras_list?:e wsp* ']' -> e - name_req = (name:n wsp* extras?:e wsp* versionspec?:v wsp* quoted_marker?:m - -> (n, e or [], v or [], m)) - url_req = (name:n wsp* extras?:e wsp* urlspec:v (wsp+ | end) quoted_marker?:m - -> (n, e or [], v, m)) - specification = wsp* ( url_req | name_req ):s wsp* -> s + wsp = ' ' | '\t' + version_cmp = wsp* <'<=' | '<' | '!=' | '==' | '>=' | '>' | '~=' | '==='> + version = wsp* <( letterOrDigit | '-' | '_' | '.' | '*' | '+' | '!' )+> + version_one = version_cmp:op version:v wsp* -> (op, v) + version_many = version_one:v1 (wsp* ',' version_one)*:v2 -> [v1] + v2 + versionspec = ('(' version_many:v ')' ->v) | version_many + urlspec = '@' wsp* + marker_op = version_cmp | (wsp* 'in') | (wsp* 'not' wsp+ 'in') + python_str_c = (wsp | letter | digit | '(' | ')' | '.' | '{' | '}' | + '-' | '_' | '*' | '#' | ':' | ';' | ',' | '/' | '?' | + '[' | ']' | '!' | '~' | '`' | '@' | '$' | '%' | '^' | + '&' | '=' | '+' | '|' | '<' | '>' ) + dquote = '"' + squote = '\\'' + python_str = (squote <(python_str_c | dquote)*>:s squote | + dquote <(python_str_c | squote)*>:s dquote) -> s + env_var = ('python_version' | 'python_full_version' | + 'os_name' | 'sys_platform' | 'platform_release' | + 'platform_system' | 'platform_version' | + 'platform_machine' | 'platform_python_implementation' | + 'implementation_name' | 'implementation_version' | + 'extra' # ONLY when defined by a containing layer + ):varname -> lookup(varname) + marker_var = wsp* (env_var | python_str) + marker_expr = marker_var:l marker_op:o marker_var:r -> (o, l, r) + | wsp* '(' marker:m wsp* ')' -> m + marker_and = marker_expr:l wsp* 'and' marker_expr:r -> ('and', l, r) + | marker_expr:m -> m + marker_or = marker_and:l wsp* 'or' marker_and:r -> ('or', l, r) + | marker_and:m -> m + marker = marker_or + quoted_marker = ';' wsp* marker + identifier_end = letterOrDigit | (('-' | '_' | '.' )* letterOrDigit) + identifier = < letterOrDigit identifier_end* > + name = identifier + extras_list = identifier:i (wsp* ',' wsp* identifier)*:ids -> [i] + ids + extras = '[' wsp* extras_list?:e wsp* ']' -> e + name_req = (name:n wsp* extras?:e wsp* versionspec?:v wsp* quoted_marker?:m + -> (n, e or [], v or [], m)) + url_req = (name:n wsp* extras?:e wsp* urlspec:v (wsp+ | end) quoted_marker?:m + -> (n, e or [], v, m)) + specification = wsp* ( url_req | name_req ):s wsp* -> s # The result is a tuple - name, list-of-extras, # list-of-version-constraints-or-a-url, marker-ast or None