Commit 290f2847 authored by Taddeus Kroes's avatar Taddeus Kroes

Added operator for verbose rewrite_all (verbose means that each step is printed).

parent fe3485a8
...@@ -50,7 +50,8 @@ OP_EQ = 21 ...@@ -50,7 +50,8 @@ OP_EQ = 21
OP_POSSIBILITIES = 22 OP_POSSIBILITIES = 22
OP_HINT = 23 OP_HINT = 23
OP_REWRITE_ALL = 24 OP_REWRITE_ALL = 24
OP_REWRITE = 25 OP_REWRITE_ALL_VERBOSE = 25
OP_REWRITE = 26
# Special identifiers # Special identifiers
PI = 'pi' PI = 'pi'
...@@ -90,8 +91,9 @@ OP_MAP = { ...@@ -90,8 +91,9 @@ OP_MAP = {
'=': OP_EQ, '=': OP_EQ,
'??': OP_POSSIBILITIES, '??': OP_POSSIBILITIES,
'?': OP_HINT, '?': OP_HINT,
'@@': OP_REWRITE_ALL,
'@': OP_REWRITE, '@': OP_REWRITE,
'@@': OP_REWRITE_ALL,
'@@@': OP_REWRITE_ALL_VERBOSE,
} }
OP_VALUE_MAP = dict([(v, k) for k, v in OP_MAP.iteritems()]) OP_VALUE_MAP = dict([(v, k) for k, v in OP_MAP.iteritems()])
...@@ -120,8 +122,9 @@ TOKEN_MAP = { ...@@ -120,8 +122,9 @@ TOKEN_MAP = {
OP_EQ: 'EQ', OP_EQ: 'EQ',
OP_POSSIBILITIES: 'POSSIBILITIES', OP_POSSIBILITIES: 'POSSIBILITIES',
OP_HINT: 'HINT', OP_HINT: 'HINT',
OP_REWRITE_ALL: 'REWRITE_ALL',
OP_REWRITE: 'REWRITE', OP_REWRITE: 'REWRITE',
OP_REWRITE_ALL: 'REWRITE_ALL',
OP_REWRITE_ALL_VERBOSE: 'REWRITE_ALL_VERBOSE',
} }
......
...@@ -261,7 +261,7 @@ class Parser(BisonParser): ...@@ -261,7 +261,7 @@ class Parser(BisonParser):
for i, p in enumerate(self.possibilities): for i, p in enumerate(self.possibilities):
print '%d %s' % (i, p) print '%d %s' % (i, p)
def rewrite(self, index=0): def rewrite(self, index=0, verbose=False):
self.find_possibilities() self.find_possibilities()
if not self.possibilities: if not self.possibilities:
...@@ -271,26 +271,33 @@ class Parser(BisonParser): ...@@ -271,26 +271,33 @@ class Parser(BisonParser):
if self.verbose: if self.verbose:
print 'Applying suggestion:', suggestion print 'Applying suggestion:', suggestion
elif verbose:
print suggestion
expression = apply_suggestion(self.root_node, suggestion) expression = apply_suggestion(self.root_node, suggestion)
if self.verbose: if self.verbose:
print 'After application: ', expression print 'After application: ', expression
elif verbose:
print expression
self.set_root_node(expression) self.set_root_node(expression)
return True return True
def rewrite_all(self): def rewrite_all(self, verbose=False):
i = 0 i = 0
while self.rewrite(): while self.rewrite(verbose=verbose):
i += 1 i += 1
if i > 100: if i > 100:
print 'Too many rewrite steps, aborting...' print 'Too many rewrite steps, aborting...'
break break
if not verbose:
return self.root_node
#def hook_run(self, filename, retval): #def hook_run(self, filename, retval):
# return retval # return retval
...@@ -331,6 +338,7 @@ class Parser(BisonParser): ...@@ -331,6 +338,7 @@ class Parser(BisonParser):
| REWRITE NEWLINE | REWRITE NEWLINE
| REWRITE NUMBER NEWLINE | REWRITE NUMBER NEWLINE
| REWRITE_ALL NEWLINE | REWRITE_ALL NEWLINE
| REWRITE_ALL_VERBOSE NEWLINE
| RAISE NEWLINE | RAISE NEWLINE
""" """
if option in (1, 2): # rule: {exp,debug} NEWLINE if option in (1, 2): # rule: {exp,debug} NEWLINE
...@@ -353,11 +361,10 @@ class Parser(BisonParser): ...@@ -353,11 +361,10 @@ class Parser(BisonParser):
self.rewrite(int(values[1])) self.rewrite(int(values[1]))
return self.root_node return self.root_node
if option == 7: # rule: REWRITE_ALL NEWLINE if option in (7, 8): # rule: REWRITE_ALL NEWLINE
self.rewrite_all() return self.rewrite_all(verbose=(option == 8))
return self.root_node
if option == 8: if option == 9:
raise RuntimeError('on_line: exception raised') raise RuntimeError('on_line: exception raised')
def on_debug(self, target, option, names, values): def on_debug(self, target, option, names, values):
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment