mirror of
https://github.com/davidhalter/parso.git
synced 2025-12-24 13:11:40 +08:00
Just use caching instead of strange transitions
This commit is contained in:
@@ -16,6 +16,7 @@ fallback token code OP, but the parser needs the actual token code.
|
||||
|
||||
"""
|
||||
|
||||
|
||||
class DFAPlan(object):
|
||||
def __init__(self, next_dfa, dfa_pushes=[]):
|
||||
self.next_dfa = next_dfa
|
||||
@@ -99,7 +100,7 @@ class Grammar(object):
|
||||
|
||||
return wrapper
|
||||
|
||||
#@_cache_labels
|
||||
@_cache_labels
|
||||
def _make_label(self, label):
|
||||
ilabel = len(self.labels)
|
||||
if label[0].isalpha():
|
||||
@@ -108,23 +109,17 @@ class Grammar(object):
|
||||
|
||||
# A named token (e.g. NAME, NUMBER, STRING)
|
||||
itoken = getattr(self._token_namespace, label, None)
|
||||
if itoken in self.tokens:
|
||||
return self.tokens[itoken]
|
||||
else:
|
||||
self.labels.append((itoken, None))
|
||||
self.tokens[itoken] = ilabel
|
||||
return ilabel
|
||||
self.labels.append((itoken, None))
|
||||
self.tokens[itoken] = ilabel
|
||||
return ilabel
|
||||
else:
|
||||
# Either a keyword or an operator
|
||||
assert label[0] in ('"', "'"), label
|
||||
# TODO use literal_eval instead of a simple eval.
|
||||
value = eval(label)
|
||||
if value in self.reserved_syntax_strings:
|
||||
return self.reserved_syntax_strings[value]
|
||||
else:
|
||||
self.labels.append(('XXX', value))
|
||||
self.reserved_syntax_strings[value] = ilabel
|
||||
return self.reserved_syntax_strings[value]
|
||||
self.labels.append(('XXX', value))
|
||||
self.reserved_syntax_strings[value] = ilabel
|
||||
return self.reserved_syntax_strings[value]
|
||||
|
||||
def _calculate_first_terminals(self, nonterminal):
|
||||
dfas = self._nonterminal_to_dfas[nonterminal]
|
||||
|
||||
Reference in New Issue
Block a user