@@ -33,12 +33,6 @@ def __init__(self, debug=False, lexer_class=None):
33
33
self .debug = debug
34
34
self .lexer_class = lexer_class or JsonPathLexer # Crufty but works around statefulness in PLY
35
35
36
- def parse (self , string , lexer = None ):
37
- lexer = lexer or self .lexer_class ()
38
- return self .parse_token_stream (lexer .tokenize (string ))
39
-
40
- def parse_token_stream (self , token_iterator , start_symbol = 'jsonpath' ):
41
-
42
36
# Since PLY has some crufty aspects and dumps files, we try to keep them local
43
37
# However, we need to derive the name of the output Python file :-/
44
38
output_directory = os .path .dirname (__file__ )
@@ -47,19 +41,24 @@ def parse_token_stream(self, token_iterator, start_symbol='jsonpath'):
47
41
except :
48
42
module_name = __name__
49
43
44
+ start_symbol = 'jsonpath'
50
45
parsing_table_module = '_' .join ([module_name , start_symbol , 'parsetab' ])
51
46
52
- # And we regenerate the parse table every time;
53
- # it doesn't actually take that long!
54
- new_parser = ply .yacc .yacc (module = self ,
55
- debug = self .debug ,
56
- tabmodule = parsing_table_module ,
57
- outputdir = output_directory ,
58
- write_tables = 0 ,
59
- start = start_symbol ,
60
- errorlog = logger )
61
-
62
- return new_parser .parse (lexer = IteratorToTokenStream (token_iterator ))
47
+ # Generate the parse table
48
+ self .parser = ply .yacc .yacc (module = self ,
49
+ debug = self .debug ,
50
+ tabmodule = parsing_table_module ,
51
+ outputdir = output_directory ,
52
+ write_tables = 0 ,
53
+ start = start_symbol ,
54
+ errorlog = logger )
55
+
56
+ def parse (self , string , lexer = None ):
57
+ lexer = lexer or self .lexer_class ()
58
+ return self .parse_token_stream (lexer .tokenize (string ))
59
+
60
+ def parse_token_stream (self , token_iterator ):
61
+ return self .parser .parse (lexer = IteratorToTokenStream (token_iterator ))
63
62
64
63
# ===================== PLY Parser specification =====================
65
64
0 commit comments