Mercurial > lbo > hg > pcombinators
changeset 28:7973c4d6a945 draft
Revert previous commit as it is not working
author | Lewin Bormann <lbo@spheniscida.de> |
---|---|
date | Tue, 21 May 2019 10:30:44 +0200 |
parents | 6e9cf2fb5f49 |
children | f5f5e4a477e4 |
files | pcombinators/combinators.py |
diffstat | 1 files changed, 5 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/pcombinators/combinators.py Tue May 21 10:11:43 2019 +0200 +++ b/pcombinators/combinators.py Tue May 21 10:30:44 2019 +0200 @@ -135,7 +135,7 @@ return self._transform(r), st2 except Exception as e: st.reset(initial) - raise Exception('{} (in {} at {} (col {}))'.format(e, self._transform, st, st.index())) + raise Exception('{} (at {} (col {}))'.format(e, st, st.index())) class _Sequence(Parser): _parsers = [] @@ -156,8 +156,7 @@ return None, st st.reset(before) break - if result is not SKIP_MARK: - results.append(result) + Util.extend_results(results, result) st = st2 return results, st2 @@ -203,8 +202,7 @@ st.reset(initial) return None, st return results, st2 - if r is not SKIP_MARK: - results.append(r) + Util.extend_results(results, r) st = st2 i += 1 return results, st @@ -275,18 +273,11 @@ def Last(p): """Return the last result from the list of results of p. Result is scalar.""" - def last(l): - if isinstance(l, list): - if len(l) == 0: - return l - return l[-1] - return p >> last - -SKIP_MARK = [] + return p >> (lambda l: l[-1] if isinstance(l, list) else l) def Skip(p): """Omit the result of parser p, and replace it with []. Result is [].""" - return p >> (lambda r: SKIP_MARK) + return p >> (lambda r: []) def ConcatenateResults(p): """Concatenate string results into a single string. Result is string."""