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
OP_POSSIBILITIES = 22
OP_HINT = 23
OP_REWRITE_ALL = 24
OP_REWRITE = 25
OP_REWRITE_ALL_VERBOSE = 25
OP_REWRITE = 26
# Special identifiers
PI = 'pi'
......@@ -90,8 +91,9 @@ OP_MAP = {
'=': OP_EQ,
'??': OP_POSSIBILITIES,
'?': OP_HINT,
'@@': OP_REWRITE_ALL,
'@': OP_REWRITE,
'@@': OP_REWRITE_ALL,
'@@@': OP_REWRITE_ALL_VERBOSE,
}
OP_VALUE_MAP = dict([(v, k) for k, v in OP_MAP.iteritems()])
......@@ -120,8 +122,9 @@ TOKEN_MAP = {
OP_EQ: 'EQ',
OP_POSSIBILITIES: 'POSSIBILITIES',
OP_HINT: 'HINT',
OP_REWRITE_ALL: 'REWRITE_ALL',
OP_REWRITE: 'REWRITE',
OP_REWRITE_ALL: 'REWRITE_ALL',
OP_REWRITE_ALL_VERBOSE: 'REWRITE_ALL_VERBOSE',
}
......
......@@ -261,7 +261,7 @@ class Parser(BisonParser):
for i, p in enumerate(self.possibilities):
print '%d %s' % (i, p)
def rewrite(self, index=0):
def rewrite(self, index=0, verbose=False):
self.find_possibilities()
if not self.possibilities:
......@@ -271,26 +271,33 @@ class Parser(BisonParser):
if self.verbose:
print 'Applying suggestion:', suggestion
elif verbose:
print suggestion
expression = apply_suggestion(self.root_node, suggestion)
if self.verbose:
print 'After application: ', expression
elif verbose:
print expression
self.set_root_node(expression)
return True
def rewrite_all(self):
def rewrite_all(self, verbose=False):
i = 0
while self.rewrite():
while self.rewrite(verbose=verbose):
i += 1
if i > 100:
print 'Too many rewrite steps, aborting...'
break
if not verbose:
return self.root_node
#def hook_run(self, filename, retval):
# return retval
......@@ -331,6 +338,7 @@ class Parser(BisonParser):
| REWRITE NEWLINE
| REWRITE NUMBER NEWLINE
| REWRITE_ALL NEWLINE
| REWRITE_ALL_VERBOSE NEWLINE
| RAISE NEWLINE
"""
if option in (1, 2): # rule: {exp,debug} NEWLINE
......@@ -353,11 +361,10 @@ class Parser(BisonParser):
self.rewrite(int(values[1]))
return self.root_node
if option == 7: # rule: REWRITE_ALL NEWLINE
self.rewrite_all()
return self.root_node
if option in (7, 8): # rule: REWRITE_ALL NEWLINE
return self.rewrite_all(verbose=(option == 8))
if option == 8:
if option == 9:
raise RuntimeError('on_line: exception raised')
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