Update to pitree.git commit e4f3cdd
authorNick Downing <nick@ndcode.org>
Tue, 29 Jan 2019 05:09:42 +0000 (16:09 +1100)
committerNick Downing <nick@ndcode.org>
Tue, 29 Jan 2019 05:14:08 +0000 (16:14 +1100)
dfa.py
nfa.py
pilex.t
regex.t
tests_ast/cal_py.t

diff --git a/dfa.py b/dfa.py
index 8d3b187..1943fe6 100644 (file)
--- a/dfa.py
+++ b/dfa.py
@@ -15,7 +15,7 @@
 # Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
 
 import bisect
-import element
+#import element
 import flex_dfa
 import numpy
 import numpy_heap
@@ -384,79 +384,79 @@ class DFA:
       i += 1
     return None
 
-  def match_yychunk(self, root, pos, off, yychunk_iter, start_index = 0):
-    if pos < 0:
-      pos, off = element.to_start_relative(root, pos, off)
-
-    def transit(transition):
-      nonlocal threads0, threads1, prefix_slop # note: also uses pos, off
-      j = prefix_slop
-      for trans in transition:
-        if trans[0] == DFA.TRANSITION_POP:
-          j += trans[1]
-        elif trans[0] == DFA.TRANSITION_DUP:
-          while j < trans[1]:
-            threads0[:0] = [None] * prefix_slop
-            threads1[:0] = [None] * prefix_slop
-            j += prefix_slop
-            prefix_slop *= 2
-          threads0[j - trans[1]:j] = threads0[j:j + trans[1]]
-          j -= trans[1]
-        elif trans[0] == DFA.TRANSITION_MARK:
-          threads0[j:j + trans[1]] = [
-            (pos, off, trans[2], thread)
-            for thread in threads0[j:j + trans[1]]
-          ]
-        elif trans[0] == DFA.TRANSITION_MOVE:
-          threads1.extend(threads0[j:j + trans[1]])
-          j += trans[1]
-        #elif trans[0] == DFA.TRANSITION_DEL:
-        #  del threads1[-trans[1]:]
-        else:
-          assert False
-      assert j == len(threads0)
-      threads0, threads1 = threads1, threads0
-      del threads1[prefix_slop:]
-
-    threads0 = [None, None]
-    threads1 = [None]
-    prefix_slop = 1
+  #def match_yychunk(self, root, pos, off, yychunk_iter, start_index = 0):
+  #  if pos < 0:
+  #    pos, off = element.to_start_relative(root, pos, off)
 
-    action = self.start_action[start_index]
-    text = element.get_text(root, pos)
-    while action != -1:
-      state, transition = self.actions[action]
-      transit(transition)
-      if state == 0:
-        # there is only one match, which is complete
-        assert len(threads0) == prefix_slop + 1
-        assert self.states[state][2] == [0]
-        return threads0[prefix_slop]
-      while off >= len(text):
-        if pos < len(root):
-          pos += 1
-          off = 0
-        else:
-          try:
-            next(yychunk_iter)
-          except StopIteration:
-            # return best match we have, but not incomplete match
-            accept = self.states[state][2]
-            return threads0[prefix_slop + accept[0]] if len(accept) else None
-          text = element.get_text(root, pos)
-      #print(
-      #  'state {0:d} pos {1:d} off {2:d} text "{3:s}"'.format(
-      #    state,
-      #    pos,
-      #    off,
-      #    text.replace('\n', '$')
-      #  )
-      #)
-      action = self.states[state][1][
-        bisect.bisect_right(self.states[state][0], ord(text[off]))
-      ]
-      off += 1
-    return None
+  #  def transit(transition):
+  #    nonlocal threads0, threads1, prefix_slop # note: also uses pos, off
+  #    j = prefix_slop
+  #    for trans in transition:
+  #      if trans[0] == DFA.TRANSITION_POP:
+  #        j += trans[1]
+  #      elif trans[0] == DFA.TRANSITION_DUP:
+  #        while j < trans[1]:
+  #          threads0[:0] = [None] * prefix_slop
+  #          threads1[:0] = [None] * prefix_slop
+  #          j += prefix_slop
+  #          prefix_slop *= 2
+  #        threads0[j - trans[1]:j] = threads0[j:j + trans[1]]
+  #        j -= trans[1]
+  #      elif trans[0] == DFA.TRANSITION_MARK:
+  #        threads0[j:j + trans[1]] = [
+  #          (pos, off, trans[2], thread)
+  #          for thread in threads0[j:j + trans[1]]
+  #        ]
+  #      elif trans[0] == DFA.TRANSITION_MOVE:
+  #        threads1.extend(threads0[j:j + trans[1]])
+  #        j += trans[1]
+  #      #elif trans[0] == DFA.TRANSITION_DEL:
+  #      #  del threads1[-trans[1]:]
+  #      else:
+  #        assert False
+  #    assert j == len(threads0)
+  #    threads0, threads1 = threads1, threads0
+  #    del threads1[prefix_slop:]
+
+  #  threads0 = [None, None]
+  #  threads1 = [None]
+  #  prefix_slop = 1
+
+  #  action = self.start_action[start_index]
+  #  text = element.get_text(root, pos)
+  #  while action != -1:
+  #    state, transition = self.actions[action]
+  #    transit(transition)
+  #    if state == 0:
+  #      # there is only one match, which is complete
+  #      assert len(threads0) == prefix_slop + 1
+  #      assert self.states[state][2] == [0]
+  #      return threads0[prefix_slop]
+  #    while off >= len(text):
+  #      if pos < len(root):
+  #        pos += 1
+  #        off = 0
+  #      else:
+  #        try:
+  #          next(yychunk_iter)
+  #        except StopIteration:
+  #          # return best match we have, but not incomplete match
+  #          accept = self.states[state][2]
+  #          return threads0[prefix_slop + accept[0]] if len(accept) else None
+  #        text = element.get_text(root, pos)
+  #    #print(
+  #    #  'state {0:d} pos {1:d} off {2:d} text "{3:s}"'.format(
+  #    #    state,
+  #    #    pos,
+  #    #    off,
+  #    #    text.replace('\n', '$')
+  #    #  )
+  #    #)
+  #    action = self.states[state][1][
+  #      bisect.bisect_right(self.states[state][0], ord(text[off]))
+  #    ]
+  #    off += 1
+  #  return None
 
   #def yylex(self, root, pos, off, factory, yychunk_iter):
   #  if pos < 0:
diff --git a/nfa.py b/nfa.py
index cd8e63d..4cdb477 100644 (file)
--- a/nfa.py
+++ b/nfa.py
@@ -16,7 +16,7 @@
 
 import bisect
 import dfa
-import element
+#import element
 
 # defines the alphabet size, set this to 0x11000 for unicode
 n_characters = 0x100
@@ -289,76 +289,76 @@ class NFA:
       i += 1
     return None
 
-  def match_yychunk(self, root, pos, off, yychunk_iter, start_index = 0):
-    if pos < 0:
-      pos, off = element.to_start_relative(root, pos, off)
+  #def match_yychunk(self, root, pos, off, yychunk_iter, start_index = 0):
+  #  if pos < 0:
+  #    pos, off = element.to_start_relative(root, pos, off)
 
-    def transit(transition):
-      nonlocal threads0, threads1, prefix_slop # note: also uses pos, off
-      j = prefix_slop
-      for trans in transition:
-        if trans[0] == dfa.DFA.TRANSITION_POP:
-          j += trans[1]
-        elif trans[0] == dfa.DFA.TRANSITION_DUP:
-          while j < trans[1]:
-            threads0[:0] = [None] * prefix_slop
-            threads1[:0] = [None] * prefix_slop
-            j += prefix_slop
-            prefix_slop *= 2
-          threads0[j - trans[1]:j] = threads0[j:j + trans[1]]
-          j -= trans[1]
-        elif trans[0] == dfa.DFA.TRANSITION_MARK:
-          threads0[j:j + trans[1]] = [
-            (pos, off, trans[2], thread)
-            for thread in threads0[j:j + trans[1]]
-          ]
-        elif trans[0] == dfa.DFA.TRANSITION_MOVE:
-          threads1.extend(threads0[j:j + trans[1]])
-          j += trans[1]
-        #elif trans[0] == dfa.DFA.TRANSITION_DEL:
-        #  del threads1[-trans[1]:]
-        else:
-          assert False
-      assert j == len(threads0)
-      threads0, threads1 = threads1, threads0
-      del threads1[prefix_slop:]
+  #  def transit(transition):
+  #    nonlocal threads0, threads1, prefix_slop # note: also uses pos, off
+  #    j = prefix_slop
+  #    for trans in transition:
+  #      if trans[0] == dfa.DFA.TRANSITION_POP:
+  #        j += trans[1]
+  #      elif trans[0] == dfa.DFA.TRANSITION_DUP:
+  #        while j < trans[1]:
+  #          threads0[:0] = [None] * prefix_slop
+  #          threads1[:0] = [None] * prefix_slop
+  #          j += prefix_slop
+  #          prefix_slop *= 2
+  #        threads0[j - trans[1]:j] = threads0[j:j + trans[1]]
+  #        j -= trans[1]
+  #      elif trans[0] == dfa.DFA.TRANSITION_MARK:
+  #        threads0[j:j + trans[1]] = [
+  #          (pos, off, trans[2], thread)
+  #          for thread in threads0[j:j + trans[1]]
+  #        ]
+  #      elif trans[0] == dfa.DFA.TRANSITION_MOVE:
+  #        threads1.extend(threads0[j:j + trans[1]])
+  #        j += trans[1]
+  #      #elif trans[0] == dfa.DFA.TRANSITION_DEL:
+  #      #  del threads1[-trans[1]:]
+  #      else:
+  #        assert False
+  #    assert j == len(threads0)
+  #    threads0, threads1 = threads1, threads0
+  #    del threads1[prefix_slop:]
 
-    threads0 = [None, None]
-    threads1 = [None]
-    prefix_slop = 1
+  #  threads0 = [None, None]
+  #  threads1 = [None]
+  #  prefix_slop = 1
 
-    start_state = self.start_state[start_index]
-    if start_state == -1:
-      return None
-    next_multistate, transition, _, _ = self.multistate_next(
-      (NFA.MULTISTATE_AND, 1, start_state, NFA.accept_multistate),
-      -1
-    )
-    text = element.get_text(root, pos)
-    while next_multistate is not None:
-      transit(transition)
-      assert len(threads0) == prefix_slop + next_multistate[1]
-      if next_multistate == NFA.accept_multistate:
-        # there is only one match, which is complete
-        assert len(threads0) == prefix_slop + 1
-        return threads0[prefix_slop]
-      while off >= len(text):
-        if pos < len(root):
-          pos += 1
-          off = 0
-        else:
-          try:
-            next(yychunk_iter)
-          except StopIteration:
-            # return best match we have, but not incomplete match
-            accept = NFA.multistate_accept(next_multistate)
-            return threads0[prefix_slop + accept[0]] if len(accept) else None
-          text = element.get_text(root, pos)
-      next_multistate, transition, _, _ = (
-        self.multistate_next(next_multistate, ord(text[off]))
-      )
-      off += 1
-    return None
+  #  start_state = self.start_state[start_index]
+  #  if start_state == -1:
+  #    return None
+  #  next_multistate, transition, _, _ = self.multistate_next(
+  #    (NFA.MULTISTATE_AND, 1, start_state, NFA.accept_multistate),
+  #    -1
+  #  )
+  #  text = element.get_text(root, pos)
+  #  while next_multistate is not None:
+  #    transit(transition)
+  #    assert len(threads0) == prefix_slop + next_multistate[1]
+  #    if next_multistate == NFA.accept_multistate:
+  #      # there is only one match, which is complete
+  #      assert len(threads0) == prefix_slop + 1
+  #      return threads0[prefix_slop]
+  #    while off >= len(text):
+  #      if pos < len(root):
+  #        pos += 1
+  #        off = 0
+  #      else:
+  #        try:
+  #          next(yychunk_iter)
+  #        except StopIteration:
+  #          # return best match we have, but not incomplete match
+  #          accept = NFA.multistate_accept(next_multistate)
+  #          return threads0[prefix_slop + accept[0]] if len(accept) else None
+  #        text = element.get_text(root, pos)
+  #    next_multistate, transition, _, _ = (
+  #      self.multistate_next(next_multistate, ord(text[off]))
+  #    )
+  #    off += 1
+  #  return None
 
   def to_dfa(self):
     _dfa = dfa.DFA()
diff --git a/pilex.t b/pilex.t
index cbfe7b8..1d0d336 100644 (file)
--- a/pilex.t
+++ b/pilex.t
@@ -839,17 +839,15 @@ def post_process(
     #    [
     #      j
     #      for i in range(len(node))
-    #      for j in [element.get_text(node, i), to_text(node[i])]
+    #      for j in [node.text[i], to_text(node[i])]
     #    ] +
-    #    [element.get_text(node, len(node))]
+    #    [node.text[len(node])]
     #  )
     #text = '{0:s}/{1:s}'.format(to_text(self.children[0]), to_text(self.children[1]))
-    #element.set_text(
-    #  _ast.actions_text[-1],
-    #  0,
+    #_ast.actions_text[-1].text[0] = \
     #  'fprintf(stderr, "%d >>>%s<<< {0:s}\\n", yy_start, yytext);\n{1:s}'.format(
     #    text.replace('\\', '\\\\').replace('"', '\\"').replace('%', '%%'),
-    #    element.get_text(_ast.actions_text[-1], 0)
+    #    _ast.actions_text[-1].text[0]
     #  )
     #)
   _ast.flex_rules.append(self)
@@ -935,7 +933,7 @@ del post_process
 
 @method(AST.Text)
 def get_text(self):
-  return element.get_text(self, 0)
+  return self.text[0]
 del get_text
 
 @method(AST)
diff --git a/regex.t b/regex.t
index 06a4244..f404f93 100644 (file)
--- a/regex.t
+++ b/regex.t
@@ -307,7 +307,7 @@ del add_to_nfa
 
 @method(Text)
 def get_text(self):
-  return element.get_text(self, 0)
+  return self.text[0]
 del get_text
 
 if __name__ == '__main__':
index 78a513a..0dea63b 100644 (file)
@@ -43,7 +43,7 @@ def factory(tag, attrib = {}, *args, **kwargs):
 
 @method(Text)
 def get_text(self):
-  return element.get_text(self, 0)
+  return self.text[0]
 del get_text
 
 @method(AST.Expr)
@@ -51,7 +51,7 @@ def eval(self):
   raise NotImplementedException()
 @method(AST.Num)
 def eval(self):
-  return float(element.get_text(self, 0))
+  return float(self.text[0])
 @method(AST.Add)
 def eval(self):
   return self[0].eval() + self[1].eval()