faster: tuples and some caching
This commit is contained in:
parent
ade859d6a0
commit
44c71b2ea9
1 changed files with 5 additions and 4 deletions
|
|
@ -144,6 +144,7 @@ class GenerateLR0(object):
|
||||||
self.terminals.add('$')
|
self.terminals.add('$')
|
||||||
self.alphabet.add('$')
|
self.alphabet.add('$')
|
||||||
|
|
||||||
|
@functools.cache
|
||||||
def gen_closure_next(self, config):
|
def gen_closure_next(self, config):
|
||||||
"""Return the next set of configurations in the closure for
|
"""Return the next set of configurations in the closure for
|
||||||
config.
|
config.
|
||||||
|
|
@ -186,11 +187,11 @@ class GenerateLR0(object):
|
||||||
The successor represents the next state of the parser after seeing
|
The successor represents the next state of the parser after seeing
|
||||||
the symbol.
|
the symbol.
|
||||||
"""
|
"""
|
||||||
seeds = [
|
seeds = tuple(
|
||||||
config.replace(position=config.position + 1)
|
config.replace(position=config.position + 1)
|
||||||
for config in config_set
|
for config in config_set
|
||||||
if config.at_symbol(symbol)
|
if config.at_symbol(symbol)
|
||||||
]
|
)
|
||||||
|
|
||||||
closure = self.gen_closure(seeds)
|
closure = self.gen_closure(seeds)
|
||||||
return closure
|
return closure
|
||||||
|
|
@ -221,7 +222,7 @@ class GenerateLR0(object):
|
||||||
def gen_all_sets(self):
|
def gen_all_sets(self):
|
||||||
"""Generate all of the configuration sets for the grammar."""
|
"""Generate all of the configuration sets for the grammar."""
|
||||||
initial_set = self.gen_closure(
|
initial_set = self.gen_closure(
|
||||||
[ Configuration.from_rule(self.grammar[0]) ]
|
( Configuration.from_rule(self.grammar[0]), )
|
||||||
)
|
)
|
||||||
return self.gen_sets(initial_set, ())
|
return self.gen_sets(initial_set, ())
|
||||||
|
|
||||||
|
|
@ -605,7 +606,7 @@ class GenerateLR1(GenerateSLR1):
|
||||||
symbol to '$'.
|
symbol to '$'.
|
||||||
"""
|
"""
|
||||||
initial_set = self.gen_closure(
|
initial_set = self.gen_closure(
|
||||||
[ Configuration.from_rule(self.grammar[0], lookahead=('$',)) ],
|
( Configuration.from_rule(self.grammar[0], lookahead=('$',)), ),
|
||||||
)
|
)
|
||||||
return self.gen_sets(initial_set, ())
|
return self.gen_sets(initial_set, ())
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue