mirror of
https://github.com/davidhalter/parso.git
synced 2026-02-17 15:34:24 +08:00
Another rename
This commit is contained in:
@@ -26,20 +26,20 @@ from parso.pgen2.grammar_parser import GrammarParser, NFAState
|
|||||||
class ParserGenerator(object):
|
class ParserGenerator(object):
|
||||||
def __init__(self, rule_to_dfas, token_namespace):
|
def __init__(self, rule_to_dfas, token_namespace):
|
||||||
self._token_namespace = token_namespace
|
self._token_namespace = token_namespace
|
||||||
self.dfas = rule_to_dfas
|
self._rule_to_dfas = rule_to_dfas
|
||||||
|
|
||||||
def make_grammar(self, grammar):
|
def make_grammar(self, grammar):
|
||||||
self._first = {} # map from symbol name to set of tokens
|
self._first = {} # map from symbol name to set of tokens
|
||||||
self._addfirstsets()
|
self._addfirstsets()
|
||||||
|
|
||||||
names = list(self.dfas.keys())
|
names = list(self._rule_to_dfas.keys())
|
||||||
names.sort()
|
names.sort()
|
||||||
for name in names:
|
for name in names:
|
||||||
i = 256 + len(grammar.symbol2number)
|
i = 256 + len(grammar.symbol2number)
|
||||||
grammar.symbol2number[name] = i
|
grammar.symbol2number[name] = i
|
||||||
grammar.number2symbol[i] = name
|
grammar.number2symbol[i] = name
|
||||||
for name in names:
|
for name in names:
|
||||||
dfa = self.dfas[name]
|
dfa = self._rule_to_dfas[name]
|
||||||
states = []
|
states = []
|
||||||
for state in dfa:
|
for state in dfa:
|
||||||
arcs = []
|
arcs = []
|
||||||
@@ -109,7 +109,7 @@ class ParserGenerator(object):
|
|||||||
return ilabel
|
return ilabel
|
||||||
|
|
||||||
def _addfirstsets(self):
|
def _addfirstsets(self):
|
||||||
names = list(self.dfas.keys())
|
names = list(self._rule_to_dfas.keys())
|
||||||
names.sort()
|
names.sort()
|
||||||
for name in names:
|
for name in names:
|
||||||
if name not in self._first:
|
if name not in self._first:
|
||||||
@@ -117,13 +117,13 @@ class ParserGenerator(object):
|
|||||||
#print name, self._first[name].keys()
|
#print name, self._first[name].keys()
|
||||||
|
|
||||||
def _calcfirst(self, name):
|
def _calcfirst(self, name):
|
||||||
dfa = self.dfas[name]
|
dfa = self._rule_to_dfas[name]
|
||||||
self._first[name] = None # dummy to detect left recursion
|
self._first[name] = None # dummy to detect left recursion
|
||||||
state = dfa[0]
|
state = dfa[0]
|
||||||
totalset = {}
|
totalset = {}
|
||||||
overlapcheck = {}
|
overlapcheck = {}
|
||||||
for label, next in state.arcs.items():
|
for label, next in state.arcs.items():
|
||||||
if label in self.dfas:
|
if label in self._rule_to_dfas:
|
||||||
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:
|
||||||
|
|||||||
Reference in New Issue
Block a user