Simplify pgen a bit.

This commit is contained in:
Dave Halter
2017-05-26 11:46:22 -04:00
parent 8948c9053b
commit 0d93a2a2df

View File

@@ -13,7 +13,7 @@ from parso import tokenize
class ParserGenerator(object): class ParserGenerator(object):
def __init__(self, bnf_text): def __init__(self, bnf_text):
self._bnf_text = bnf_text self._bnf_text = bnf_text
self.generator = tokenize.source_tokens(bnf_text, exact_op_types=False) self.generator = tokenize.source_tokens(bnf_text)
self._gettoken() # Initialize lookahead self._gettoken() # Initialize lookahead
self.dfas, self.startsymbol = self._parse() self.dfas, self.startsymbol = self._parse()
self.first = {} # map from symbol name to set of tokens self.first = {} # map from symbol name to set of tokens
@@ -146,7 +146,7 @@ class ParserGenerator(object):
self._gettoken() self._gettoken()
# RULE: NAME ':' RHS NEWLINE # RULE: NAME ':' RHS NEWLINE
name = self._expect(token.NAME) name = self._expect(token.NAME)
self._expect(token.OP, ":") self._expect(token.COLON)
a, z = self._parse_rhs() a, z = self._parse_rhs()
self._expect(token.NEWLINE) self._expect(token.NEWLINE)
#self._dump_nfa(name, a, z) #self._dump_nfa(name, a, z)
@@ -276,7 +276,7 @@ class ParserGenerator(object):
if self.value == "[": if self.value == "[":
self._gettoken() self._gettoken()
a, z = self._parse_rhs() a, z = self._parse_rhs()
self._expect(token.OP, "]") self._expect(token.RSQB)
a.addarc(z) a.addarc(z)
return a, z return a, z
else: else:
@@ -296,7 +296,7 @@ class ParserGenerator(object):
if self.value == "(": if self.value == "(":
self._gettoken() self._gettoken()
a, z = self._parse_rhs() a, z = self._parse_rhs()
self._expect(token.OP, ")") self._expect(token.RPAR)
return a, z return a, z
elif self.type in (token.NAME, token.STRING): elif self.type in (token.NAME, token.STRING):
a = NFAState() a = NFAState()
@@ -308,10 +308,10 @@ class ParserGenerator(object):
self._raise_error("expected (...) or NAME or STRING, got %s/%s", self._raise_error("expected (...) or NAME or STRING, got %s/%s",
self.type, self.value) self.type, self.value)
def _expect(self, type, value=None): def _expect(self, type):
if self.type != type or (value is not None and self.value != value): if self.type != type:
self._raise_error("expected %s/%s, got %s/%s", self._raise_error("expected %s, got %s(%s)",
type, value, self.type, self.value) type, self.type, self.value)
value = self.value value = self.value
self._gettoken() self._gettoken()
return value return value