[pypy-commit] pypy py3.6: Issue #2886

arigo pypy.commits at gmail.com
Tue Sep 25 11:45:07 EDT 2018


Author: Armin Rigo <arigo at tunes.org>
Branch: py3.6
Changeset: r95161:1cef1b3f6ac9
Date: 2018-09-25 17:44 +0200
http://bitbucket.org/pypy/pypy/changeset/1cef1b3f6ac9/

Log:	Issue #2886

	SyntaxError on float literals with underscores in the fractional
	part (I
	*think* the fix is just this one line in gendfa.py)

diff --git a/pypy/interpreter/pyparser/dfa_generated.py b/pypy/interpreter/pyparser/dfa_generated.py
--- a/pypy/interpreter/pyparser/dfa_generated.py
+++ b/pypy/interpreter/pyparser/dfa_generated.py
@@ -10,11 +10,12 @@
            False, False, True, False, False, True, False,
            False, True, False, True, False, True, False,
            False, True, False, False, True, False, True,
-           False, True, False, True, False, False, False,
-           False, True, True, False, False, False, False,
-           True, False, True, False, True, False, True,
-           False, True, True, False, True, False, True,
-           False, False, True, True, True, True, True]
+           False, True, False, True, False, False, True,
+           False, False, True, True, False, False, False,
+           False, True, False, True, False, True, False,
+           False, True, False, True, True, False, True,
+           False, True, False, True, False, True, True, True,
+           True, True]
 states = [
     # 0
     {'\t': 0, '\n': 15, '\x0c': 0,
@@ -190,23 +191,23 @@
      '7': 27, '8': 27, '9': 27, 'E': 29,
      'J': 15, '_': 49, 'e': 29, 'j': 15},
     # 28
-    {'0': 28, '1': 28, '2': 28, '3': 28,
-     '4': 28, '5': 28, '6': 28, '7': 28,
-     '8': 28, '9': 28, 'E': 50, 'J': 15,
-     'e': 50, 'j': 15},
+    {'0': 50, '1': 50, '2': 50, '3': 50,
+     '4': 50, '5': 50, '6': 50, '7': 50,
+     '8': 50, '9': 50, 'E': 51, 'J': 15,
+     'e': 51, 'j': 15},
     # 29
-    {'+': 51, '-': 51, '0': 52, '1': 52,
-     '2': 52, '3': 52, '4': 52, '5': 52,
-     '6': 52, '7': 52, '8': 52, '9': 52},
+    {'+': 52, '-': 52, '0': 53, '1': 53,
+     '2': 53, '3': 53, '4': 53, '5': 53,
+     '6': 53, '7': 53, '8': 53, '9': 53},
     # 30
-    {'0': 53, '1': 53, '2': 53, '3': 53,
-     '4': 53, '5': 53, '6': 53, '7': 53,
-     '8': 53, '9': 53},
+    {'0': 54, '1': 54, '2': 54, '3': 54,
+     '4': 54, '5': 54, '6': 54, '7': 54,
+     '8': 54, '9': 54},
     # 31
     {'0': 31, '1': 31, '2': 31, '3': 31,
      '4': 31, '5': 31, '6': 31, '7': 31,
-     '8': 31, '9': 31, 'E': 50, 'J': 15,
-     '_': 54, 'e': 50, 'j': 15},
+     '8': 31, '9': 31, 'E': 51, 'J': 15,
+     '_': 55, 'e': 51, 'j': 15},
     # 32
     {'.': 15},
     # 33
@@ -218,14 +219,14 @@
     # 35
     {"'": 15},
     # 36
-    {automata.DEFAULT: 55, '\n': 15, '\r': 16},
+    {automata.DEFAULT: 56, '\n': 15, '\r': 16},
     # 37
     {automata.DEFAULT: 37, '\n': 34,
      '\r': 34, "'": 15, '\\': 36},
     # 38
     {'"': 15},
     # 39
-    {automata.DEFAULT: 56, '\n': 15, '\r': 16},
+    {automata.DEFAULT: 57, '\n': 15, '\r': 16},
     # 40
     {automata.DEFAULT: 40, '\n': 34,
      '\r': 34, '"': 15, '\\': 39},
@@ -234,26 +235,26 @@
      '4': 41, '5': 41, '6': 41, '7': 41,
      '8': 41, '9': 41, 'A': 41, 'B': 41,
      'C': 41, 'D': 41, 'E': 41, 'F': 41,
-     '_': 57, 'a': 41, 'b': 41, 'c': 41,
+     '_': 58, 'a': 41, 'b': 41, 'c': 41,
      'd': 41, 'e': 41, 'f': 41},
     # 42
-    {'0': 58, '1': 58, '2': 58, '3': 58,
-     '4': 58, '5': 58, '6': 58, '7': 58,
-     '8': 58, '9': 58, 'A': 58, 'B': 58,
-     'C': 58, 'D': 58, 'E': 58, 'F': 58,
-     'a': 58, 'b': 58, 'c': 58, 'd': 58,
-     'e': 58, 'f': 58},
+    {'0': 59, '1': 59, '2': 59, '3': 59,
+     '4': 59, '5': 59, '6': 59, '7': 59,
+     '8': 59, '9': 59, 'A': 59, 'B': 59,
+     'C': 59, 'D': 59, 'E': 59, 'F': 59,
+     'a': 59, 'b': 59, 'c': 59, 'd': 59,
+     'e': 59, 'f': 59},
     # 43
     {'0': 43, '1': 43, '2': 43, '3': 43,
      '4': 43, '5': 43, '6': 43, '7': 43,
-     '_': 59},
+     '_': 60},
     # 44
-    {'0': 60, '1': 60, '2': 60, '3': 60,
-     '4': 60, '5': 60, '6': 60, '7': 60},
+    {'0': 61, '1': 61, '2': 61, '3': 61,
+     '4': 61, '5': 61, '6': 61, '7': 61},
     # 45
-    {'0': 45, '1': 45, '_': 61},
+    {'0': 45, '1': 45, '_': 62},
     # 46
-    {'0': 62, '1': 62},
+    {'0': 63, '1': 63},
     # 47
     {'.': 28, '0': 47, '1': 48, '2': 48,
      '3': 48, '4': 48, '5': 48, '6': 48,
@@ -269,127 +270,141 @@
      '4': 48, '5': 48, '6': 48, '7': 48,
      '8': 48, '9': 48},
     # 50
-    {'+': 63, '-': 63, '0': 64, '1': 64,
-     '2': 64, '3': 64, '4': 64, '5': 64,
-     '6': 64, '7': 64, '8': 64, '9': 64},
+    {'0': 50, '1': 50, '2': 50, '3': 50,
+     '4': 50, '5': 50, '6': 50, '7': 50,
+     '8': 50, '9': 50, 'E': 51, 'J': 15,
+     '_': 64, 'e': 51, 'j': 15},
     # 51
-    {'0': 52, '1': 52, '2': 52, '3': 52,
-     '4': 52, '5': 52, '6': 52, '7': 52,
-     '8': 52, '9': 52},
+    {'+': 65, '-': 65, '0': 66, '1': 66,
+     '2': 66, '3': 66, '4': 66, '5': 66,
+     '6': 66, '7': 66, '8': 66, '9': 66},
     # 52
-    {'0': 52, '1': 52, '2': 52, '3': 52,
-     '4': 52, '5': 52, '6': 52, '7': 52,
-     '8': 52, '9': 52, 'J': 15, '_': 65,
+    {'0': 53, '1': 53, '2': 53, '3': 53,
+     '4': 53, '5': 53, '6': 53, '7': 53,
+     '8': 53, '9': 53},
+    # 53
+    {'0': 53, '1': 53, '2': 53, '3': 53,
+     '4': 53, '5': 53, '6': 53, '7': 53,
+     '8': 53, '9': 53, 'J': 15, '_': 67,
      'j': 15},
-    # 53
-    {'.': 28, '0': 53, '1': 53, '2': 53,
-     '3': 53, '4': 53, '5': 53, '6': 53,
-     '7': 53, '8': 53, '9': 53, 'E': 29,
+    # 54
+    {'.': 28, '0': 54, '1': 54, '2': 54,
+     '3': 54, '4': 54, '5': 54, '6': 54,
+     '7': 54, '8': 54, '9': 54, 'E': 29,
      'J': 15, '_': 30, 'e': 29, 'j': 15},
-    # 54
+    # 55
+    {'0': 68, '1': 68, '2': 68, '3': 68,
+     '4': 68, '5': 68, '6': 68, '7': 68,
+     '8': 68, '9': 68},
+    # 56
+    {automata.DEFAULT: 56, '\n': 34,
+     '\r': 34, "'": 15, '\\': 36},
+    # 57
+    {automata.DEFAULT: 57, '\n': 34,
+     '\r': 34, '"': 15, '\\': 39},
+    # 58
+    {'0': 69, '1': 69, '2': 69, '3': 69,
+     '4': 69, '5': 69, '6': 69, '7': 69,
+     '8': 69, '9': 69, 'A': 69, 'B': 69,
+     'C': 69, 'D': 69, 'E': 69, 'F': 69,
+     'a': 69, 'b': 69, 'c': 69, 'd': 69,
+     'e': 69, 'f': 69},
+    # 59
+    {'0': 59, '1': 59, '2': 59, '3': 59,
+     '4': 59, '5': 59, '6': 59, '7': 59,
+     '8': 59, '9': 59, 'A': 59, 'B': 59,
+     'C': 59, 'D': 59, 'E': 59, 'F': 59,
+     '_': 70, 'a': 59, 'b': 59, 'c': 59,
+     'd': 59, 'e': 59, 'f': 59},
+    # 60
+    {'0': 71, '1': 71, '2': 71, '3': 71,
+     '4': 71, '5': 71, '6': 71, '7': 71},
+    # 61
+    {'0': 61, '1': 61, '2': 61, '3': 61,
+     '4': 61, '5': 61, '6': 61, '7': 61,
+     '_': 72},
+    # 62
+    {'0': 73, '1': 73},
+    # 63
+    {'0': 63, '1': 63, '_': 74},
+    # 64
+    {'0': 75, '1': 75, '2': 75, '3': 75,
+     '4': 75, '5': 75, '6': 75, '7': 75,
+     '8': 75, '9': 75},
+    # 65
     {'0': 66, '1': 66, '2': 66, '3': 66,
      '4': 66, '5': 66, '6': 66, '7': 66,
      '8': 66, '9': 66},
-    # 55
-    {automata.DEFAULT: 55, '\n': 34,
-     '\r': 34, "'": 15, '\\': 36},
-    # 56
-    {automata.DEFAULT: 56, '\n': 34,
-     '\r': 34, '"': 15, '\\': 39},
-    # 57
-    {'0': 67, '1': 67, '2': 67, '3': 67,
-     '4': 67, '5': 67, '6': 67, '7': 67,
-     '8': 67, '9': 67, 'A': 67, 'B': 67,
-     'C': 67, 'D': 67, 'E': 67, 'F': 67,
-     'a': 67, 'b': 67, 'c': 67, 'd': 67,
-     'e': 67, 'f': 67},
-    # 58
-    {'0': 58, '1': 58, '2': 58, '3': 58,
-     '4': 58, '5': 58, '6': 58, '7': 58,
-     '8': 58, '9': 58, 'A': 58, 'B': 58,
-     'C': 58, 'D': 58, 'E': 58, 'F': 58,
-     '_': 68, 'a': 58, 'b': 58, 'c': 58,
-     'd': 58, 'e': 58, 'f': 58},
-    # 59
-    {'0': 69, '1': 69, '2': 69, '3': 69,
-     '4': 69, '5': 69, '6': 69, '7': 69},
-    # 60
-    {'0': 60, '1': 60, '2': 60, '3': 60,
-     '4': 60, '5': 60, '6': 60, '7': 60,
-     '_': 70},
-    # 61
-    {'0': 71, '1': 71},
-    # 62
-    {'0': 62, '1': 62, '_': 72},
-    # 63
-    {'0': 64, '1': 64, '2': 64, '3': 64,
-     '4': 64, '5': 64, '6': 64, '7': 64,
-     '8': 64, '9': 64},
-    # 64
-    {'0': 64, '1': 64, '2': 64, '3': 64,
-     '4': 64, '5': 64, '6': 64, '7': 64,
-     '8': 64, '9': 64, 'J': 15, '_': 73,
-     'j': 15},
-    # 65
-    {'0': 74, '1': 74, '2': 74, '3': 74,
-     '4': 74, '5': 74, '6': 74, '7': 74,
-     '8': 74, '9': 74},
     # 66
     {'0': 66, '1': 66, '2': 66, '3': 66,
      '4': 66, '5': 66, '6': 66, '7': 66,
-     '8': 66, '9': 66, 'E': 50, 'J': 15,
-     '_': 54, 'e': 50, 'j': 15},
+     '8': 66, '9': 66, 'J': 15, '_': 76,
+     'j': 15},
     # 67
-    {'0': 67, '1': 67, '2': 67, '3': 67,
-     '4': 67, '5': 67, '6': 67, '7': 67,
-     '8': 67, '9': 67, 'A': 67, 'B': 67,
-     'C': 67, 'D': 67, 'E': 67, 'F': 67,
-     '_': 57, 'a': 67, 'b': 67, 'c': 67,
-     'd': 67, 'e': 67, 'f': 67},
+    {'0': 77, '1': 77, '2': 77, '3': 77,
+     '4': 77, '5': 77, '6': 77, '7': 77,
+     '8': 77, '9': 77},
     # 68
-    {'0': 75, '1': 75, '2': 75, '3': 75,
-     '4': 75, '5': 75, '6': 75, '7': 75,
-     '8': 75, '9': 75, 'A': 75, 'B': 75,
-     'C': 75, 'D': 75, 'E': 75, 'F': 75,
-     'a': 75, 'b': 75, 'c': 75, 'd': 75,
-     'e': 75, 'f': 75},
+    {'0': 68, '1': 68, '2': 68, '3': 68,
+     '4': 68, '5': 68, '6': 68, '7': 68,
+     '8': 68, '9': 68, 'E': 51, 'J': 15,
+     '_': 55, 'e': 51, 'j': 15},
     # 69
     {'0': 69, '1': 69, '2': 69, '3': 69,
      '4': 69, '5': 69, '6': 69, '7': 69,
-     '_': 59},
+     '8': 69, '9': 69, 'A': 69, 'B': 69,
+     'C': 69, 'D': 69, 'E': 69, 'F': 69,
+     '_': 58, 'a': 69, 'b': 69, 'c': 69,
+     'd': 69, 'e': 69, 'f': 69},
     # 70
-    {'0': 76, '1': 76, '2': 76, '3': 76,
-     '4': 76, '5': 76, '6': 76, '7': 76},
-    # 71
-    {'0': 71, '1': 71, '_': 61},
-    # 72
-    {'0': 77, '1': 77},
-    # 73
     {'0': 78, '1': 78, '2': 78, '3': 78,
      '4': 78, '5': 78, '6': 78, '7': 78,
-     '8': 78, '9': 78},
+     '8': 78, '9': 78, 'A': 78, 'B': 78,
+     'C': 78, 'D': 78, 'E': 78, 'F': 78,
+     'a': 78, 'b': 78, 'c': 78, 'd': 78,
+     'e': 78, 'f': 78},
+    # 71
+    {'0': 71, '1': 71, '2': 71, '3': 71,
+     '4': 71, '5': 71, '6': 71, '7': 71,
+     '_': 60},
+    # 72
+    {'0': 79, '1': 79, '2': 79, '3': 79,
+     '4': 79, '5': 79, '6': 79, '7': 79},
+    # 73
+    {'0': 73, '1': 73, '_': 62},
     # 74
-    {'0': 74, '1': 74, '2': 74, '3': 74,
-     '4': 74, '5': 74, '6': 74, '7': 74,
-     '8': 74, '9': 74, 'J': 15, '_': 65,
-     'j': 15},
+    {'0': 80, '1': 80},
     # 75
     {'0': 75, '1': 75, '2': 75, '3': 75,
      '4': 75, '5': 75, '6': 75, '7': 75,
-     '8': 75, '9': 75, 'A': 75, 'B': 75,
-     'C': 75, 'D': 75, 'E': 75, 'F': 75,
-     '_': 68, 'a': 75, 'b': 75, 'c': 75,
-     'd': 75, 'e': 75, 'f': 75},
+     '8': 75, '9': 75, 'E': 51, 'J': 15,
+     '_': 64, 'e': 51, 'j': 15},
     # 76
-    {'0': 76, '1': 76, '2': 76, '3': 76,
-     '4': 76, '5': 76, '6': 76, '7': 76,
-     '_': 70},
+    {'0': 81, '1': 81, '2': 81, '3': 81,
+     '4': 81, '5': 81, '6': 81, '7': 81,
+     '8': 81, '9': 81},
     # 77
-    {'0': 77, '1': 77, '_': 72},
+    {'0': 77, '1': 77, '2': 77, '3': 77,
+     '4': 77, '5': 77, '6': 77, '7': 77,
+     '8': 77, '9': 77, 'J': 15, '_': 67,
+     'j': 15},
     # 78
     {'0': 78, '1': 78, '2': 78, '3': 78,
      '4': 78, '5': 78, '6': 78, '7': 78,
-     '8': 78, '9': 78, 'J': 15, '_': 73,
+     '8': 78, '9': 78, 'A': 78, 'B': 78,
+     'C': 78, 'D': 78, 'E': 78, 'F': 78,
+     '_': 70, 'a': 78, 'b': 78, 'c': 78,
+     'd': 78, 'e': 78, 'f': 78},
+    # 79
+    {'0': 79, '1': 79, '2': 79, '3': 79,
+     '4': 79, '5': 79, '6': 79, '7': 79,
+     '_': 72},
+    # 80
+    {'0': 80, '1': 80, '_': 74},
+    # 81
+    {'0': 81, '1': 81, '2': 81, '3': 81,
+     '4': 81, '5': 81, '6': 81, '7': 81,
+     '8': 81, '9': 81, 'J': 15, '_': 76,
      'j': 15},
     ]
 pseudoDFA = automata.DFA(states, accepts)
diff --git a/pypy/interpreter/pyparser/gendfa.py b/pypy/interpreter/pyparser/gendfa.py
--- a/pypy/interpreter/pyparser/gendfa.py
+++ b/pypy/interpreter/pyparser/gendfa.py
@@ -113,7 +113,7 @@
                            chain(states,
                                  makeDigitsChain(),
                                  newArcPair(states, "."),
-                                 any(states, makeDigits())),
+                                 any(states, makeDigitsChain())),
                            chain(states,
                                  newArcPair(states, "."),
                                  makeDigitsChain()))
diff --git a/pypy/interpreter/pyparser/test/test_pyparse.py b/pypy/interpreter/pyparser/test/test_pyparse.py
--- a/pypy/interpreter/pyparser/test/test_pyparse.py
+++ b/pypy/interpreter/pyparser/test/test_pyparse.py
@@ -252,6 +252,13 @@
             '.1_4j',
             '(1_2.5+3_3j)',
             '(.5_6j)',
+            '.2_3',
+            '.2_3e4',
+            '1.2_3',
+            '1.2_3_4',
+            '12.000_400',
+            '1_2.3_4',
+            '1_2.3_4e5_6',
         ]
         INVALID_UNDERSCORE_LITERALS = [
             # Trailing underscores:
@@ -305,6 +312,13 @@
             # Complex cases with parens:
             '(1+1.5_j_)',
             '(1+1.5_j)',
+            # Extra underscores around decimal part
+            '._3',
+            '._3e4',
+            '1.2_',
+            '1._3_4',
+            '12._',
+            '1_2._3',
         ]
         for x in VALID_UNDERSCORE_LITERALS:
             tree = self.parse(x)


More information about the pypy-commit mailing list