Author: Armin Rigo <[email protected]>
Branch: reverse-debugger
Changeset: r85421:91e8176fb344
Date: 2016-06-28 13:23 +0200
http://bitbucket.org/pypy/pypy/changeset/91e8176fb344/
Log: started pypy support: recognize in pyparser the syntax of a dollar
sign followed by a decimal number
diff --git a/pypy/interpreter/pyparser/data/Grammar2.7
b/pypy/interpreter/pyparser/data/Grammar2.7
--- a/pypy/interpreter/pyparser/data/Grammar2.7
+++ b/pypy/interpreter/pyparser/data/Grammar2.7
@@ -104,7 +104,7 @@
'[' [listmaker] ']' |
'{' [dictorsetmaker] '}' |
'`' testlist1 '`' |
- NAME | NUMBER | STRING+)
+ NAME | NUMBER | STRING+ | revdb_metavar)
listmaker: test ( list_for | (',' test)* [','] )
testlist_comp: test ( comp_for | (',' test)* [','] )
lambdef: 'lambda' [varargslist] ':' test
@@ -141,3 +141,5 @@
encoding_decl: NAME
yield_expr: 'yield' [testlist]
+
+revdb_metavar: '$NUM'
diff --git a/pypy/interpreter/pyparser/genpytokenize.py
b/pypy/interpreter/pyparser/genpytokenize.py
--- a/pypy/interpreter/pyparser/genpytokenize.py
+++ b/pypy/interpreter/pyparser/genpytokenize.py
@@ -140,7 +140,10 @@
special = group(states,
makeEOL(),
groupStr(states, "@:;.,`"))
- funny = group(states, operator, bracket, special)
+ revdb_metavar = chain(states,
+ groupStr(states, "$"),
+ atleastonce(states, makeDigits()))
+ funny = group(states, operator, bracket, special, revdb_metavar)
# ____________________________________________________________
def makeStrPrefix ():
return chain(states,
diff --git a/pypy/interpreter/pyparser/pytoken.py
b/pypy/interpreter/pyparser/pytoken.py
--- a/pypy/interpreter/pyparser/pytoken.py
+++ b/pypy/interpreter/pyparser/pytoken.py
@@ -67,5 +67,6 @@
# extra PyPy-specific tokens
_add_tok("COMMENT")
_add_tok("NL")
+_add_tok("REVDBMETAVAR", "$NUM")
del _add_tok
diff --git a/pypy/interpreter/pyparser/pytokenize.py
b/pypy/interpreter/pyparser/pytokenize.py
--- a/pypy/interpreter/pyparser/pytokenize.py
+++ b/pypy/interpreter/pyparser/pytokenize.py
@@ -25,37 +25,38 @@
accepts = [True, True, True, True, True, True, True, True,
True, True, False, True, True, True, True, False,
- False, False, True, False, False, True, False,
- False, True, False, True, False, True, False,
- False, True, False, False, True, True, True,
- False, False, True, False, False, False, True]
+ False, False, False, True, False, False, True,
+ False, False, True, False, True, True, False,
+ True, False, False, True, False, False, True,
+ True, True, False, False, True, False, False,
+ False, True]
states = [
# 0
{'\t': 0, '\n': 13, '\x0c': 0,
- '\r': 14, ' ': 0, '!': 10, '"': 16,
- '#': 18, '%': 12, '&': 12, "'": 15,
- '(': 13, ')': 13, '*': 7, '+': 12,
- ',': 13, '-': 12, '.': 6, '/': 11,
- '0': 4, '1': 5, '2': 5, '3': 5,
- '4': 5, '5': 5, '6': 5, '7': 5,
- '8': 5, '9': 5, ':': 13, ';': 13,
- '<': 9, '=': 12, '>': 8, '@': 13,
- 'A': 1, 'B': 2, 'C': 1, 'D': 1,
- 'E': 1, 'F': 1, 'G': 1, 'H': 1,
- 'I': 1, 'J': 1, 'K': 1, 'L': 1,
- 'M': 1, 'N': 1, 'O': 1, 'P': 1,
- 'Q': 1, 'R': 3, 'S': 1, 'T': 1,
- 'U': 2, 'V': 1, 'W': 1, 'X': 1,
- 'Y': 1, 'Z': 1, '[': 13, '\\': 17,
- ']': 13, '^': 12, '_': 1, '`': 13,
- 'a': 1, 'b': 2, 'c': 1, 'd': 1,
- 'e': 1, 'f': 1, 'g': 1, 'h': 1,
- 'i': 1, 'j': 1, 'k': 1, 'l': 1,
- 'm': 1, 'n': 1, 'o': 1, 'p': 1,
- 'q': 1, 'r': 3, 's': 1, 't': 1,
- 'u': 2, 'v': 1, 'w': 1, 'x': 1,
- 'y': 1, 'z': 1, '{': 13, '|': 12,
- '}': 13, '~': 13},
+ '\r': 14, ' ': 0, '!': 10, '"': 17,
+ '#': 19, '$': 15, '%': 12, '&': 12,
+ "'": 16, '(': 13, ')': 13, '*': 7,
+ '+': 12, ',': 13, '-': 12, '.': 6,
+ '/': 11, '0': 4, '1': 5, '2': 5,
+ '3': 5, '4': 5, '5': 5, '6': 5,
+ '7': 5, '8': 5, '9': 5, ':': 13,
+ ';': 13, '<': 9, '=': 12, '>': 8,
+ '@': 13, 'A': 1, 'B': 2, 'C': 1,
+ 'D': 1, 'E': 1, 'F': 1, 'G': 1,
+ 'H': 1, 'I': 1, 'J': 1, 'K': 1,
+ 'L': 1, 'M': 1, 'N': 1, 'O': 1,
+ 'P': 1, 'Q': 1, 'R': 3, 'S': 1,
+ 'T': 1, 'U': 2, 'V': 1, 'W': 1,
+ 'X': 1, 'Y': 1, 'Z': 1, '[': 13,
+ '\\': 18, ']': 13, '^': 12, '_': 1,
+ '`': 13, 'a': 1, 'b': 2, 'c': 1,
+ 'd': 1, 'e': 1, 'f': 1, 'g': 1,
+ 'h': 1, 'i': 1, 'j': 1, 'k': 1,
+ 'l': 1, 'm': 1, 'n': 1, 'o': 1,
+ 'p': 1, 'q': 1, 'r': 3, 's': 1,
+ 't': 1, 'u': 2, 'v': 1, 'w': 1,
+ 'x': 1, 'y': 1, 'z': 1, '{': 13,
+ '|': 12, '}': 13, '~': 13},
# 1
{'0': 1, '1': 1, '2': 1, '3': 1,
'4': 1, '5': 1, '6': 1, '7': 1,
@@ -74,7 +75,7 @@
't': 1, 'u': 1, 'v': 1, 'w': 1,
'x': 1, 'y': 1, 'z': 1},
# 2
- {'"': 16, "'": 15, '0': 1, '1': 1,
+ {'"': 17, "'": 16, '0': 1, '1': 1,
'2': 1, '3': 1, '4': 1, '5': 1,
'6': 1, '7': 1, '8': 1, '9': 1,
'A': 1, 'B': 1, 'C': 1, 'D': 1,
@@ -92,7 +93,7 @@
'v': 1, 'w': 1, 'x': 1, 'y': 1,
'z': 1},
# 3
- {'"': 16, "'": 15, '0': 1, '1': 1,
+ {'"': 17, "'": 16, '0': 1, '1': 1,
'2': 1, '3': 1, '4': 1, '5': 1,
'6': 1, '7': 1, '8': 1, '9': 1,
'A': 1, 'B': 1, 'C': 1, 'D': 1,
@@ -110,22 +111,22 @@
'v': 1, 'w': 1, 'x': 1, 'y': 1,
'z': 1},
# 4
- {'.': 24, '0': 21, '1': 21, '2': 21,
- '3': 21, '4': 21, '5': 21, '6': 21,
- '7': 21, '8': 23, '9': 23, 'B': 22,
- 'E': 25, 'J': 13, 'L': 13, 'O': 20,
- 'X': 19, 'b': 22, 'e': 25, 'j': 13,
- 'l': 13, 'o': 20, 'x': 19},
+ {'.': 25, '0': 22, '1': 22, '2': 22,
+ '3': 22, '4': 22, '5': 22, '6': 22,
+ '7': 22, '8': 24, '9': 24, 'B': 23,
+ 'E': 26, 'J': 13, 'L': 13, 'O': 21,
+ 'X': 20, 'b': 23, 'e': 26, 'j': 13,
+ 'l': 13, 'o': 21, 'x': 20},
# 5
- {'.': 24, '0': 5, '1': 5, '2': 5,
+ {'.': 25, '0': 5, '1': 5, '2': 5,
'3': 5, '4': 5, '5': 5, '6': 5,
- '7': 5, '8': 5, '9': 5, 'E': 25,
- 'J': 13, 'L': 13, 'e': 25, 'j': 13,
+ '7': 5, '8': 5, '9': 5, 'E': 26,
+ 'J': 13, 'L': 13, 'e': 26, 'j': 13,
'l': 13},
# 6
- {'0': 26, '1': 26, '2': 26, '3': 26,
- '4': 26, '5': 26, '6': 26, '7': 26,
- '8': 26, '9': 26},
+ {'0': 27, '1': 27, '2': 27, '3': 27,
+ '4': 27, '5': 27, '6': 27, '7': 27,
+ '8': 27, '9': 27},
# 7
{'*': 12, '=': 13},
# 8
@@ -143,107 +144,115 @@
# 14
{'\n': 13},
# 15
- {automata.DEFAULT: 30, '\n': 27,
- '\r': 27, "'": 28, '\\': 29},
+ {'0': 28, '1': 28, '2': 28, '3': 28,
+ '4': 28, '5': 28, '6': 28, '7': 28,
+ '8': 28, '9': 28},
# 16
- {automata.DEFAULT: 33, '\n': 27,
- '\r': 27, '"': 31, '\\': 32},
+ {automata.DEFAULT: 32, '\n': 29,
+ '\r': 29, "'": 30, '\\': 31},
# 17
+ {automata.DEFAULT: 35, '\n': 29,
+ '\r': 29, '"': 33, '\\': 34},
+ # 18
{'\n': 13, '\r': 14},
- # 18
- {automata.DEFAULT: 18, '\n': 27, '\r': 27},
# 19
- {'0': 34, '1': 34, '2': 34, '3': 34,
- '4': 34, '5': 34, '6': 34, '7': 34,
- '8': 34, '9': 34, 'A': 34, 'B': 34,
- 'C': 34, 'D': 34, 'E': 34, 'F': 34,
- 'a': 34, 'b': 34, 'c': 34, 'd': 34,
- 'e': 34, 'f': 34},
+ {automata.DEFAULT: 19, '\n': 29, '\r': 29},
# 20
- {'0': 35, '1': 35, '2': 35, '3': 35,
- '4': 35, '5': 35, '6': 35, '7': 35},
+ {'0': 36, '1': 36, '2': 36, '3': 36,
+ '4': 36, '5': 36, '6': 36, '7': 36,
+ '8': 36, '9': 36, 'A': 36, 'B': 36,
+ 'C': 36, 'D': 36, 'E': 36, 'F': 36,
+ 'a': 36, 'b': 36, 'c': 36, 'd': 36,
+ 'e': 36, 'f': 36},
# 21
- {'.': 24, '0': 21, '1': 21, '2': 21,
- '3': 21, '4': 21, '5': 21, '6': 21,
- '7': 21, '8': 23, '9': 23, 'E': 25,
- 'J': 13, 'L': 13, 'e': 25, 'j': 13,
+ {'0': 37, '1': 37, '2': 37, '3': 37,
+ '4': 37, '5': 37, '6': 37, '7': 37},
+ # 22
+ {'.': 25, '0': 22, '1': 22, '2': 22,
+ '3': 22, '4': 22, '5': 22, '6': 22,
+ '7': 22, '8': 24, '9': 24, 'E': 26,
+ 'J': 13, 'L': 13, 'e': 26, 'j': 13,
'l': 13},
- # 22
- {'0': 36, '1': 36},
# 23
- {'.': 24, '0': 23, '1': 23, '2': 23,
- '3': 23, '4': 23, '5': 23, '6': 23,
- '7': 23, '8': 23, '9': 23, 'E': 25,
- 'J': 13, 'e': 25, 'j': 13},
+ {'0': 38, '1': 38},
# 24
- {'0': 24, '1': 24, '2': 24, '3': 24,
- '4': 24, '5': 24, '6': 24, '7': 24,
- '8': 24, '9': 24, 'E': 37, 'J': 13,
- 'e': 37, 'j': 13},
+ {'.': 25, '0': 24, '1': 24, '2': 24,
+ '3': 24, '4': 24, '5': 24, '6': 24,
+ '7': 24, '8': 24, '9': 24, 'E': 26,
+ 'J': 13, 'e': 26, 'j': 13},
# 25
- {'+': 38, '-': 38, '0': 39, '1': 39,
- '2': 39, '3': 39, '4': 39, '5': 39,
- '6': 39, '7': 39, '8': 39, '9': 39},
+ {'0': 25, '1': 25, '2': 25, '3': 25,
+ '4': 25, '5': 25, '6': 25, '7': 25,
+ '8': 25, '9': 25, 'E': 39, 'J': 13,
+ 'e': 39, 'j': 13},
# 26
- {'0': 26, '1': 26, '2': 26, '3': 26,
- '4': 26, '5': 26, '6': 26, '7': 26,
- '8': 26, '9': 26, 'E': 37, 'J': 13,
- 'e': 37, 'j': 13},
+ {'+': 40, '-': 40, '0': 41, '1': 41,
+ '2': 41, '3': 41, '4': 41, '5': 41,
+ '6': 41, '7': 41, '8': 41, '9': 41},
# 27
+ {'0': 27, '1': 27, '2': 27, '3': 27,
+ '4': 27, '5': 27, '6': 27, '7': 27,
+ '8': 27, '9': 27, 'E': 39, 'J': 13,
+ 'e': 39, 'j': 13},
+ # 28
+ {'0': 28, '1': 28, '2': 28, '3': 28,
+ '4': 28, '5': 28, '6': 28, '7': 28,
+ '8': 28, '9': 28},
+ # 29
{},
- # 28
+ # 30
{"'": 13},
- # 29
- {automata.DEFAULT: 40, '\n': 13, '\r': 14},
- # 30
- {automata.DEFAULT: 30, '\n': 27,
- '\r': 27, "'": 13, '\\': 29},
# 31
+ {automata.DEFAULT: 42, '\n': 13, '\r': 14},
+ # 32
+ {automata.DEFAULT: 32, '\n': 29,
+ '\r': 29, "'": 13, '\\': 31},
+ # 33
{'"': 13},
- # 32
- {automata.DEFAULT: 41, '\n': 13, '\r': 14},
- # 33
- {automata.DEFAULT: 33, '\n': 27,
- '\r': 27, '"': 13, '\\': 32},
# 34
- {'0': 34, '1': 34, '2': 34, '3': 34,
- '4': 34, '5': 34, '6': 34, '7': 34,
- '8': 34, '9': 34, 'A': 34, 'B': 34,
- 'C': 34, 'D': 34, 'E': 34, 'F': 34,
- 'L': 13, 'a': 34, 'b': 34, 'c': 34,
- 'd': 34, 'e': 34, 'f': 34, 'l': 13},
+ {automata.DEFAULT: 43, '\n': 13, '\r': 14},
# 35
- {'0': 35, '1': 35, '2': 35, '3': 35,
- '4': 35, '5': 35, '6': 35, '7': 35,
+ {automata.DEFAULT: 35, '\n': 29,
+ '\r': 29, '"': 13, '\\': 34},
+ # 36
+ {'0': 36, '1': 36, '2': 36, '3': 36,
+ '4': 36, '5': 36, '6': 36, '7': 36,
+ '8': 36, '9': 36, 'A': 36, 'B': 36,
+ 'C': 36, 'D': 36, 'E': 36, 'F': 36,
+ 'L': 13, 'a': 36, 'b': 36, 'c': 36,
+ 'd': 36, 'e': 36, 'f': 36, 'l': 13},
+ # 37
+ {'0': 37, '1': 37, '2': 37, '3': 37,
+ '4': 37, '5': 37, '6': 37, '7': 37,
'L': 13, 'l': 13},
- # 36
- {'0': 36, '1': 36, 'L': 13, 'l': 13},
- # 37
- {'+': 42, '-': 42, '0': 43, '1': 43,
- '2': 43, '3': 43, '4': 43, '5': 43,
- '6': 43, '7': 43, '8': 43, '9': 43},
# 38
- {'0': 39, '1': 39, '2': 39, '3': 39,
- '4': 39, '5': 39, '6': 39, '7': 39,
- '8': 39, '9': 39},
+ {'0': 38, '1': 38, 'L': 13, 'l': 13},
# 39
- {'0': 39, '1': 39, '2': 39, '3': 39,
- '4': 39, '5': 39, '6': 39, '7': 39,
- '8': 39, '9': 39, 'J': 13, 'j': 13},
+ {'+': 44, '-': 44, '0': 45, '1': 45,
+ '2': 45, '3': 45, '4': 45, '5': 45,
+ '6': 45, '7': 45, '8': 45, '9': 45},
# 40
- {automata.DEFAULT: 40, '\n': 27,
- '\r': 27, "'": 13, '\\': 29},
+ {'0': 41, '1': 41, '2': 41, '3': 41,
+ '4': 41, '5': 41, '6': 41, '7': 41,
+ '8': 41, '9': 41},
# 41
- {automata.DEFAULT: 41, '\n': 27,
- '\r': 27, '"': 13, '\\': 32},
+ {'0': 41, '1': 41, '2': 41, '3': 41,
+ '4': 41, '5': 41, '6': 41, '7': 41,
+ '8': 41, '9': 41, 'J': 13, 'j': 13},
# 42
- {'0': 43, '1': 43, '2': 43, '3': 43,
- '4': 43, '5': 43, '6': 43, '7': 43,
- '8': 43, '9': 43},
+ {automata.DEFAULT: 42, '\n': 29,
+ '\r': 29, "'": 13, '\\': 31},
# 43
- {'0': 43, '1': 43, '2': 43, '3': 43,
- '4': 43, '5': 43, '6': 43, '7': 43,
- '8': 43, '9': 43, 'J': 13, 'j': 13},
+ {automata.DEFAULT: 43, '\n': 29,
+ '\r': 29, '"': 13, '\\': 34},
+ # 44
+ {'0': 45, '1': 45, '2': 45, '3': 45,
+ '4': 45, '5': 45, '6': 45, '7': 45,
+ '8': 45, '9': 45},
+ # 45
+ {'0': 45, '1': 45, '2': 45, '3': 45,
+ '4': 45, '5': 45, '6': 45, '7': 45,
+ '8': 45, '9': 45, 'J': 13, 'j': 13},
]
pseudoDFA = automata.DFA(states, accepts)
diff --git a/pypy/interpreter/pyparser/pytokenizer.py
b/pypy/interpreter/pyparser/pytokenizer.py
--- a/pypy/interpreter/pyparser/pytokenizer.py
+++ b/pypy/interpreter/pyparser/pytokenizer.py
@@ -220,6 +220,10 @@
last_comment = ''
elif initial == '\\': # continued stmt
continued = 1
+ elif initial == '$':
+ token_list.append((tokens.REVDBMETAVAR, token,
+ lnum, start, line))
+ last_comment = ''
else:
if initial in '([{':
if parenlev == 0:
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
@@ -165,3 +165,12 @@
for linefeed in ["\r\n","\r"]:
tree = self.parse(fmt % linefeed)
assert expected_tree == tree
+
+ def test_revdb_dollar_num(self):
+ self.parse('$0')
+ self.parse('$5')
+ self.parse('$42')
+ self.parse('2+$42.attrname')
+ py.test.raises(SyntaxError, self.parse, '$')
+ py.test.raises(SyntaxError, self.parse, '$a')
+ py.test.raises(SyntaxError, self.parse, '$.5')
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit