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 = []
--- a/pcombinators/primitives.py	Tue May 21 10:30:44 2019 +0200
+++ b/pcombinators/primitives.py	Tue May 21 13:22:57 2019 +0200
@@ -169,4 +169,4 @@
         if digits is not None:
             return int(digits)*multiplier, st
         st.reset(initial)
-        return None, st
\ No newline at end of file
+        return None, st