[pypy-svn] r73633 - in pypy/trunk/pypy/interpreter/pyparser: . test
benjamin at codespeak.net
benjamin at codespeak.net
Sat Apr 10 22:13:15 CEST 2010
Author: benjamin
Date: Sat Apr 10 22:13:12 2010
New Revision: 73633
Modified:
pypy/trunk/pypy/interpreter/pyparser/metaparser.py
pypy/trunk/pypy/interpreter/pyparser/parser.py
pypy/trunk/pypy/interpreter/pyparser/test/test_metaparser.py
Log:
make dfas a list to optimize access
Modified: pypy/trunk/pypy/interpreter/pyparser/metaparser.py
==============================================================================
--- pypy/trunk/pypy/interpreter/pyparser/metaparser.py (original)
+++ pypy/trunk/pypy/interpreter/pyparser/metaparser.py Sat Apr 10 22:13:12 2010
@@ -146,8 +146,8 @@
for label, next in state.arcs.iteritems():
arcs.append((self.make_label(gram, label), dfa.index(next)))
states.append((arcs, state.is_final))
- our_id = gram.symbol_ids[name]
- gram.dfas[our_id] = (states, self.make_first(gram, name))
+ gram.dfas.append((states, self.make_first(gram, name)))
+ assert len(gram.dfas) - 1 == gram.symbol_ids[name] - 256
gram.start = gram.symbol_ids[self.start_symbol]
return gram
Modified: pypy/trunk/pypy/interpreter/pyparser/parser.py
==============================================================================
--- pypy/trunk/pypy/interpreter/pyparser/parser.py (original)
+++ pypy/trunk/pypy/interpreter/pyparser/parser.py Sat Apr 10 22:13:12 2010
@@ -16,7 +16,7 @@
self.symbol_names = {}
self.symbol_to_label = {}
self.keyword_ids = {}
- self.dfas = {}
+ self.dfas = []
self.labels = [0]
self.token_ids = {}
@@ -98,7 +98,7 @@
self.root = None
current_node = Node(start, None, [], 0, 0)
self.stack = []
- self.stack.append((self.grammar.dfas[start], 0, current_node))
+ self.stack.append((self.grammar.dfas[start - 256], 0, current_node))
def add_token(self, token_type, value, lineno, column, line):
label_index = self.classify(token_type, value, lineno, column, line)
@@ -124,7 +124,7 @@
state = dfa[0][state_index]
return False
elif sym_id >= 256:
- sub_node_dfa = self.grammar.dfas[sym_id]
+ sub_node_dfa = self.grammar.dfas[sym_id - 256]
# Check if this token can start a child node.
if label_index in sub_node_dfa[1]:
self.push(sub_node_dfa, next_state, sym_id, lineno,
Modified: pypy/trunk/pypy/interpreter/pyparser/test/test_metaparser.py
==============================================================================
--- pypy/trunk/pypy/interpreter/pyparser/test/test_metaparser.py (original)
+++ pypy/trunk/pypy/interpreter/pyparser/test/test_metaparser.py Sat Apr 10 22:13:12 2010
@@ -33,9 +33,8 @@
g = self.gram_for("eval: NAME\n")
assert len(g.dfas) == 1
eval_sym = g.symbol_ids["eval"]
- assert eval_sym in g.dfas
assert g.start == eval_sym
- states, first = g.dfas[eval_sym]
+ states, first = g.dfas[eval_sym - 256]
assert states == [([(1, 1)], False), ([], True)]
assert g.labels[0] == 0
@@ -52,7 +51,7 @@
def test_items(self):
g = self.gram_for("foo: NAME STRING OP '+'")
assert len(g.dfas) == 1
- states = g.dfas[g.symbol_ids["foo"]][0]
+ states = g.dfas[g.symbol_ids["foo"] - 256][0]
last = states[0][0][0][1]
for state in states[1:-1]:
assert last < state[0][0][1]
More information about the Pypy-commit
mailing list