Hi Dov,
This works:
In the java file for the listener:
public class tns2toadListener extends tnsnamesBaseListener
{
tnsnamesParser parser; // The Parser we are listening for.
String[] ruleNames; // The parser's list of rule names.
...
In the constructor for the listener, we need the parser as a parameter:
public tns2toadListener(tnsnamesParser parser, ....)
{
this.parser = parser;
this.ruleNames = parser.getRuleNames();
...
In the EveryRule listener method, we do this:
@Override
public void enterEveryRule(ParserRuleContext ctx)
{
String Rule = this.ruleNames[ctx.getRuleIndex()];
System.out.println("Rule = " + Rule);
...
The Rule string should contain the rule that is currently executing.
In the java file for the app itself, we have this:
ANTLRInputStream input = new ANTLRInputStream(iStream);
tnsnamesLexer lexer = new tnsnamesLexer(input);
CommonTokenStream tokens = new CommonTokenStream(lexer);
tnsnamesParser parser = new tnsnamesParser(tokens);
ParseTree tree = parser.tnsnames();
ParseTreeWalker tnsWalker = new ParseTreeWalker();
// Create my listener and pass in the parser etc.
tns2toadListener tnsListener = new tns2toadListener(parser, ...);
tnsWalker.walk(tnsListener, tree);
When running the finished app, I get something similar to the following:
Rule = tnsnames
Rule = alias_list
Rule = alias
Rule = description
Rule = address
Rule = protocol_info
Rule = tcp_protocol
Rule = tcp_params
Rule = tcp_parameter
Rule = tcp_tcp
Rule = tcp_parameter
Rule = tcp_host
Rule = host
Rule = tcp_parameter
Rule = tcp_port
Rule = port
Rule = connect_data
Rule = cd_params
Rule = cd_parameter
Rule = cd_server
Rule = cd_parameter
Rule = cd_service_name
and so on, and on and on ... ;-)
HTH
Cheers,
Norm.
--
Sent from my Android device with K-9 Mail. Please excuse my brevity.