Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Current »

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.

  • No labels