From 95ddeb4012c4e6a9a136ef2785116a7ba66985ab Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Wed, 13 Jun 2018 00:54:18 +0200 Subject: [PATCH] Factor out start_symbol into a better position --- parso/pgen2/grammar.py | 8 ++++++-- parso/pgen2/pgen.py | 11 +++-------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/parso/pgen2/grammar.py b/parso/pgen2/grammar.py index bb51530..b2aa96d 100644 --- a/parso/pgen2/grammar.py +++ b/parso/pgen2/grammar.py @@ -70,7 +70,7 @@ class Grammar(object): """ - def __init__(self, bnf_text): + def __init__(self, bnf_text, start_symbol): self.symbol2number = {} self.number2symbol = {} self.states = [] @@ -80,7 +80,11 @@ class Grammar(object): self.tokens = {} self.symbol2label = {} self.label2symbol = {} - self.start = 256 + self.start_symbol = start_symbol + + @property + def start_symbol(self): + return self.symbol2number[self.start_symbol] def report(self): """Dump the grammar tables to standard output, for debugging.""" diff --git a/parso/pgen2/pgen.py b/parso/pgen2/pgen.py index 1637c3d..0965416 100644 --- a/parso/pgen2/pgen.py +++ b/parso/pgen2/pgen.py @@ -25,10 +25,9 @@ from parso.utils import parse_version_string class ParserGenerator(object): - def __init__(self, dfas, start_symbol, token_namespace): + def __init__(self, dfas, token_namespace): self._token_namespace = token_namespace self.dfas = dfas - self.start_symbol = start_symbol def make_grammar(self, grammar): self._first = {} # map from symbol name to set of tokens @@ -36,9 +35,6 @@ class ParserGenerator(object): names = list(self.dfas.keys()) names.sort() - # TODO do we still need this? - names.remove(self.start_symbol) - names.insert(0, self.start_symbol) for name in names: i = 256 + len(grammar.symbol2number) grammar.symbol2number[name] = i @@ -55,7 +51,6 @@ class ParserGenerator(object): states.append(arcs) grammar.states.append(states) grammar.dfas[grammar.symbol2number[name]] = (states, self._make_first(grammar, name)) - grammar.start = grammar.symbol2number[self.start_symbol] return grammar def _make_first(self, grammar, name): @@ -419,5 +414,5 @@ def generate_grammar(bnf_grammar, token_namespace): own parser. """ dfas, start_symbol = _GrammarParser(bnf_grammar)._parse() - p = ParserGenerator(dfas, start_symbol, token_namespace) - return p.make_grammar(Grammar(bnf_grammar)) + p = ParserGenerator(dfas, token_namespace) + return p.make_grammar(Grammar(bnf_grammar, start_symbol))