[antlr-interest] Bug report for python-antlr3: None --> rulePostProcessing(...) --> None --> replaceChildren(..., None)
Петров Илья
petrov.ilya at gmail.com
Tue May 31 00:23:05 PDT 2011
This is a bug report for python-antlr3, antlr-v3.1.3.
Hi, I'm trying to transform a tree of some assembly language via
executing and throwing away nodes of assembler directives.
I'm working for python-target (antlr-v3.1.3) and have a problem with
plain simple tree-to-nil transformation:
`
dot_dot_directive
:
^(DOT_DOT_NAME ^(ARGS DOT_DOT_ARGS?) DOT_DOT_BODY?)
-> // gives
AttributeError: 'NoneType' object has no attribute 'isNil'
// -> ^() // won't compile
// -> ^({self.adaptor.nil()}) // gives
AttributeError: 'NoneType' object has no attribute 'isNil'
// -> ^({self.adaptor.create(HEX,'00')}) // works, but not what I want
// -> ^($block_child) // gives
antlr3.tree.RewriteEmptyStreamException: rule retval
;
`.
Here is an error message in detail:
`
File "assembler_I_am_tinkering_Walker.py", line 713, in dot_dot_directive
File "c:\python25\lib\site-packages\antlr_python_runtime-3.1.3-py2.5.egg\antlr3\tree.py",
line 2070, in replaceChildre
n
parent, startChildIndex, stopChildIndex, t
File "c:\python25\lib\site-packages\antlr_python_runtime-3.1.3-py2.5.egg\antlr3\tree.py",
line 1615, in replaceChildre
n
parent.replaceChildren(startChildIndex, stopChildIndex, t)
File "c:\python25\lib\site-packages\antlr_python_runtime-3.1.3-py2.5.egg\antlr3\tree.py",
line 809, in replaceChildren
if newTree.isNil():
AttributeError: 'NoneType' object has no attribute 'isNil'
`.
Looking up generated tree parser code gives:
`
# 103:55: ->
root_0 = None
retval.tree = self._adaptor.rulePostProcessing(root_0) # None ->
None -> retval.tree
self.input.replaceChildren(
self._adaptor.getParent(retval.start),
self._adaptor.getChildIndex(retval.start),
self._adaptor.getChildIndex(_last),
retval.tree
)
`.
Shallow investigation reveals that error chain leads to
`parent.replaceChildren(startChildIndex, stopChildIndex, t)`,
where t is None and then `t.isNil()` is invoked without checking if t is None.
I don't understand how it should work, but I've just tinkered
rulePostProcessing to return nil node unaffected to push
my job further.
I hope this bug report will help others to spend less time dealing
with the same error.
Terence Parr, Benjamin Niemann, antlr is a great tool, thanks for sharing it.
More information about the antlr-interest
mailing list