Har
Har

Reputation: 3918

ANTLR4: Obtaining list of tokens for a specific rule in Listener

I am extending a Listener in ANTLR4 and I want to get all of the tokens which are associated with a particular rule in the parser, is there a method in doing that?

i.e.

myConfiguration: CONFIG EQUALS parameters ;
parameters: ALPHANUMERIC+

CONFIG: 'config' ;
ALPHANUMERIC: [a-zA-Z0-9] ;

How can I tell my listener to lookup the value of CONFIG and EQUALS when entering the myConfiguration parsing rule?

Is there a for loop of some sort I could use?

for( all tokens in this rule) {
    System.out.println(token.getText());
}

I can see that there is a list of tokens through the parser class but I cant find a list of tokens which are associated with the current rule.

The reason why I am asking this is so that I can avoid re-typing the token names which I require in the Listener AND in the grammar. By doing that I can check whether or not each token type in that particular rule has been found without having to type in the name manually.

Upvotes: 6

Views: 6700

Answers (1)

Sam Harwell
Sam Harwell

Reputation: 99949

This might be what you're looking for.

List<TerminalNode> terminalNodes = new ArrayList<TerminalNode>();
for (int i = 0; i < context.getChildCount(); i++) {
    if (context.getChild(i) instanceof TerminalNode) {
        terminalNodes.add((TerminalNode)context.getChild(i));
    }
}

Upvotes: 8

Related Questions