Why do I get a null pointer exception when I try to reference text attributes in my tree parser?
Most likely you have not told the tree parser where it can find the token stream from which to obtain text. Recall that the default tree node implementation has a token pointer as a payload. This token pointer points into the original token stream, which might need to point to the character stream from which the tokens were derived. In order to access the text for a tree, you must tell the tree node stream where it can find the token stream. References such as $ruleref.text
in the tree parser make no sense unless it knows where to find the stream of token objects. Example:
CommonTokenStream tokens = new CommonTokenStream(lexer); ... CommonTreeNodeStream nodes = new CommonTreeNodeStream(t); // AST nodes have payloads that point into token stream nodes.setTokenStream(tokens);
The generated code for $ruleref.text
looks like:
input.getTokenStream().toString( input.getTreeAdaptor().getTokenStartIndex(ruleref.start), input.getTreeAdaptor().getTokenStopIndex(ruleref.start));
input.getTokenStream()
is probably the source of the null pointer if you've not called setTokenStream
.