Mercurial > lbo > hg > pcombinators
changeset 29:f5f5e4a477e4 draft
Flatten atomic sequences for better performance and some semantic differences
author | Lewin Bormann <lbo@spheniscida.de> |
---|---|
date | Tue, 21 May 2019 13:22:57 +0200 |
parents | 7973c4d6a945 |
children | 56b097b690c2 |
files | pcombinators/combinators.py pcombinators/primitives.py |
diffstat | 2 files changed, 14 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/pcombinators/combinators.py Tue May 21 10:30:44 2019 +0200 +++ b/pcombinators/combinators.py Tue May 21 13:22:57 2019 +0200 @@ -143,6 +143,19 @@ def __init__(self, *parsers): self._parsers = parsers + self._flatten() + + def _flatten(self): + if len(self._parsers) == 0: + return + result = [] + for (i, p) in enumerate(self._parsers): + if isinstance(p, type(self)): + p._flatten() + result.extend(p._parsers) + else: + result.append(p) + self._parsers = result def parse(self, st): results = []