mirror of
https://github.com/davidhalter/parso.git
synced 2026-08-12 10:54:59 +08:00
Use a set instead of dict if it's not necessary
This commit is contained in:
+5
-5
@@ -123,7 +123,7 @@ class ParserGenerator(object):
|
|||||||
if label in self._first:
|
if label in self._first:
|
||||||
fset = self._first[label]
|
fset = self._first[label]
|
||||||
if fset is None:
|
if fset is None:
|
||||||
raise ValueError("recursion for rule %r" % name)
|
raise ValueError("left recursion for rule %r" % name)
|
||||||
else:
|
else:
|
||||||
self._calcfirst(label)
|
self._calcfirst(label)
|
||||||
fset = self._first[label]
|
fset = self._first[label]
|
||||||
@@ -145,7 +145,7 @@ class ParserGenerator(object):
|
|||||||
|
|
||||||
class DFAState(object):
|
class DFAState(object):
|
||||||
def __init__(self, from_rule, nfa_set, final):
|
def __init__(self, from_rule, nfa_set, final):
|
||||||
assert isinstance(nfa_set, dict)
|
assert isinstance(nfa_set, set)
|
||||||
assert isinstance(next(iter(nfa_set)), NFAState)
|
assert isinstance(next(iter(nfa_set)), NFAState)
|
||||||
assert isinstance(final, NFAState)
|
assert isinstance(final, NFAState)
|
||||||
self.from_rule = from_rule
|
self.from_rule = from_rule
|
||||||
@@ -215,12 +215,12 @@ def _make_dfas(start, finish):
|
|||||||
assert isinstance(state, NFAState)
|
assert isinstance(state, NFAState)
|
||||||
if state in base:
|
if state in base:
|
||||||
return
|
return
|
||||||
base[state] = 1
|
base.add(state)
|
||||||
for nfa_arc in state.arcs:
|
for nfa_arc in state.arcs:
|
||||||
if nfa_arc.label_or_string is None:
|
if nfa_arc.label_or_string is None:
|
||||||
addclosure(nfa_arc.next, base)
|
addclosure(nfa_arc.next, base)
|
||||||
|
|
||||||
base = {}
|
base = set()
|
||||||
addclosure(start, base)
|
addclosure(start, base)
|
||||||
states = [DFAState(start.from_rule, base, finish)]
|
states = [DFAState(start.from_rule, base, finish)]
|
||||||
for state in states: # NB states grows while we're iterating
|
for state in states: # NB states grows while we're iterating
|
||||||
@@ -228,7 +228,7 @@ def _make_dfas(start, finish):
|
|||||||
for nfa_state in state.nfa_set:
|
for nfa_state in state.nfa_set:
|
||||||
for nfa_arc in nfa_state.arcs:
|
for nfa_arc in nfa_state.arcs:
|
||||||
if nfa_arc.label_or_string is not None:
|
if nfa_arc.label_or_string is not None:
|
||||||
addclosure(nfa_arc.next, arcs.setdefault(nfa_arc.label_or_string, {}))
|
addclosure(nfa_arc.next, arcs.setdefault(nfa_arc.label_or_string, set()))
|
||||||
for label_or_string, nfa_set in arcs.items():
|
for label_or_string, nfa_set in arcs.items():
|
||||||
for st in states:
|
for st in states:
|
||||||
if st.nfa_set == nfa_set:
|
if st.nfa_set == nfa_set:
|
||||||
|
|||||||
Reference in New Issue
Block a user