From 2807f75b4e56d8c857903bafde0b927fb6ef85f5 Mon Sep 17 00:00:00 2001 From: Gabi Davar Date: Sat, 30 Jul 2016 14:57:53 +0300 Subject: [PATCH 1/2] An obvious typo. Running the test without the fix results in: ``` >python p508.py Traceback (most recent call last): File "p508.py", line 163, in parsed = compiled(test).specification() File "c:\Users\gabi\_envs\extra_test\lib\site-packages\parsley.py", line 85, in invokeRule ret, err = self._grammar.apply(name, *args) File "c:\Users\gabi\_envs\extra_test\lib\site-packages\ometa\runtime.py", line 462, in apply val, err = self._apply(r, ruleName, args) File "c:\Users\gabi\_envs\extra_test\lib\site-packages\ometa\runtime.py", line 495, in _apply [rule(), self.input]) File "/pymeta_generated_code/pymeta_grammar__Grammar.py", line 1079, in rule_specification File "c:\Users\gabi\_envs\extra_test\lib\site-packages\ometa\runtime.py", line 598, in _or ret, err = f() File "/pymeta_generated_code/pymeta_grammar__Grammar.py", line 1071, in _G_or_376 File "c:\Users\gabi\_envs\extra_test\lib\site-packages\ometa\runtime.py", line 495, in _apply [rule(), self.input]) File "/pymeta_generated_code/pymeta_grammar__Grammar.py", line 1006, in rule_url_req File "c:\Users\gabi\_envs\extra_test\lib\site-packages\ometa\runtime.py", line 495, in _apply [rule(), self.input]) File "/pymeta_generated_code/pymeta_grammar__Grammar.py", line 859, in rule_name File "c:\Users\gabi\_envs\extra_test\lib\site-packages\ometa\runtime.py", line 495, in _apply [rule(), self.input]) File "/pymeta_generated_code/pymeta_grammar__Grammar.py", line 850, in rule_identifier File "c:\Users\gabi\_envs\extra_test\lib\site-packages\ometa\runtime.py", line 676, in consumedby _, e = expr() File "/pymeta_generated_code/pymeta_grammar__Grammar.py", line 847, in _G_consumedby_294 File "c:\Users\gabi\_envs\extra_test\lib\site-packages\ometa\runtime.py", line 554, in many v, _ = fn() File "/pymeta_generated_code/pymeta_grammar__Grammar.py", line 844, in _G_many_296 AttributeError: 'Grammar' object has no attribute 'rule_identifier_end' ``` --- pep-0508.txt | 84 ++++++++++++++++++++++++++-------------------------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/pep-0508.txt b/pep-0508.txt index 87bee98b7b4..239d6d093de 100644 --- a/pep-0508.txt +++ b/pep-0508.txt @@ -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 From e800c967cad2eb07329ae4a2dc0f9ec4887456d7 Mon Sep 17 00:00:00 2001 From: Kristian Glass Date: Mon, 10 Dec 2018 15:52:12 +0000 Subject: [PATCH 2/2] Fix op-out-of-order bug in earlier version_cmp definition From bab4e866c83289a788313051f54f4a5235065d3e --- pep-0508.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pep-0508.txt b/pep-0508.txt index 239d6d093de..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)*