7
7
8
8
START_IDENTIFIER = set (string .ascii_letters + '_' )
9
9
VALID_IDENTIFIER = set (string .ascii_letters + string .digits + '_' )
10
- START_NUMBER = set (string .digits )
10
+ START_NUMBER = set (string .digits + '-' )
11
11
VALID_NUMBER = set (string .digits )
12
12
WHITESPACE = set (" \t \n \r " )
13
13
SIMPLE_TOKENS = {
@@ -43,7 +43,7 @@ def next(self):
43
43
self .current = self .chars [self .pos ]
44
44
return self .current
45
45
46
- def in_delimter (self , delimiter ):
46
+ def in_delimiter (self , delimiter ):
47
47
start = self .pos
48
48
buffer = ''
49
49
self .next ()
@@ -66,7 +66,6 @@ class Lexer(object):
66
66
def tokenize (self , expression ):
67
67
scanner = Scanner (expression )
68
68
while scanner .current is not None :
69
-
70
69
if scanner .current in SIMPLE_TOKENS :
71
70
yield {'type' : SIMPLE_TOKENS [scanner .current ],
72
71
'value' : scanner .current ,
@@ -77,7 +76,7 @@ def tokenize(self, expression):
77
76
buffer = scanner .current
78
77
while scanner .next () in VALID_IDENTIFIER :
79
78
buffer += scanner .current
80
- yield {'type' : 'identifier ' , 'value' : buffer ,
79
+ yield {'type' : 'unquoted_identifier ' , 'value' : buffer ,
81
80
'start' : start , 'end' : len (buffer )}
82
81
elif scanner .current in WHITESPACE :
83
82
scanner .next ()
@@ -127,29 +126,29 @@ def tokenize(self, expression):
127
126
128
127
def _consume_literal (self , scanner ):
129
128
start = scanner .pos
130
- lexeme = scanner .in_delimter ('`' )
129
+ lexeme = scanner .in_delimiter ('`' )
131
130
try :
132
131
# Assume it is valid JSON and attempt to parse.
133
132
parsed_json = loads (lexeme )
134
133
except ValueError :
135
134
try :
136
135
# Invalid JSON values should be converted to quoted
137
136
# JSON strings during the JEP-12 deprecation period.
138
- parsed_json = loads ('"%s"' % lexeme )
137
+ parsed_json = loads ('"%s"' % lexeme . lstrip () )
139
138
warnings .warn ("deprecated string literal syntax" ,
140
139
PendingDeprecationWarning )
141
140
except ValueError :
142
141
raise LexerError (lexer_position = start ,
143
142
lexer_value = lexeme ,
144
- message = "Bad token %s" % value )
143
+ message = "Bad token %s" % lexeme )
145
144
return {'type' : 'literal' , 'value' : parsed_json ,
146
145
'start' : start , 'end' : len (lexeme )}
147
146
148
147
def _consume_quoted_identifier (self , scanner ):
149
148
start = scanner .pos
150
- lexeme = scanner .in_delimter ('"' )
149
+ lexeme = scanner .in_delimiter ('"' )
151
150
try :
152
- return {'type' : 'identifier ' , 'value' : loads (lexeme ),
151
+ return {'type' : 'quoted_identifier ' , 'value' : loads (lexeme ),
153
152
'start' : start , 'end' : len (lexeme )}
154
153
except ValueError as e :
155
154
error_message = str (e ).split (':' )[0 ]
@@ -159,7 +158,7 @@ def _consume_quoted_identifier(self, scanner):
159
158
160
159
def _consume_raw_string_literal (self , scanner ):
161
160
start = scanner .pos
162
- lexeme = scanner .in_delimter ("'" )
161
+ lexeme = scanner .in_delimiter ("'" )
163
162
return {'type' : 'literal' , 'value' : lexeme ,
164
163
'start' : start , 'end' : len (lexeme )}
165
164
0 commit comments