Factor out start_symbol into a better position

This commit is contained in:
Dave Halter
2018-06-13 00:54:18 +02:00
parent f638abb08e
commit 95ddeb4012
2 changed files with 9 additions and 10 deletions

View File

@@ -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."""

View File

@@ -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))