[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