mirror of
https://github.com/davidhalter/parso.git
synced 2026-02-20 08:38: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):
|
class DFAPlan(object):
|
||||||
def __init__(self, next_dfa, dfa_pushes=[]):
|
def __init__(self, next_dfa, dfa_pushes=[]):
|
||||||
self.next_dfa = next_dfa
|
self.next_dfa = next_dfa
|
||||||
@@ -99,7 +100,7 @@ class Grammar(object):
|
|||||||
|
|
||||||
return wrapper
|
return wrapper
|
||||||
|
|
||||||
#@_cache_labels
|
@_cache_labels
|
||||||
def _make_label(self, label):
|
def _make_label(self, label):
|
||||||
ilabel = len(self.labels)
|
ilabel = len(self.labels)
|
||||||
if label[0].isalpha():
|
if label[0].isalpha():
|
||||||
@@ -108,23 +109,17 @@ class Grammar(object):
|
|||||||
|
|
||||||
# A named token (e.g. NAME, NUMBER, STRING)
|
# A named token (e.g. NAME, NUMBER, STRING)
|
||||||
itoken = getattr(self._token_namespace, label, None)
|
itoken = getattr(self._token_namespace, label, None)
|
||||||
if itoken in self.tokens:
|
self.labels.append((itoken, None))
|
||||||
return self.tokens[itoken]
|
self.tokens[itoken] = ilabel
|
||||||
else:
|
return ilabel
|
||||||
self.labels.append((itoken, None))
|
|
||||||
self.tokens[itoken] = ilabel
|
|
||||||
return ilabel
|
|
||||||
else:
|
else:
|
||||||
# Either a keyword or an operator
|
# Either a keyword or an operator
|
||||||
assert label[0] in ('"', "'"), label
|
assert label[0] in ('"', "'"), label
|
||||||
# TODO use literal_eval instead of a simple eval.
|
# TODO use literal_eval instead of a simple eval.
|
||||||
value = eval(label)
|
value = eval(label)
|
||||||
if value in self.reserved_syntax_strings:
|
self.labels.append(('XXX', value))
|
||||||
return self.reserved_syntax_strings[value]
|
self.reserved_syntax_strings[value] = ilabel
|
||||||
else:
|
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):
|
def _calculate_first_terminals(self, nonterminal):
|
||||||
dfas = self._nonterminal_to_dfas[nonterminal]
|
dfas = self._nonterminal_to_dfas[nonterminal]
|
||||||
|
|||||||
Reference in New Issue
Block a user