mirror of
https://github.com/davidhalter/parso.git
synced 2025-12-06 21:04:29 +08:00
Simplify pgen a bit.
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user