import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; /** * Extend {@link collector} to handle "require" statement references, * rule name definitions and ordinary rule references. * * @layer<require> */ public class Collector { public void visit( BaliGrammarNode node ) { original( node ) ; baliRules.addDefinition( node.tok[0].getTokenName() ) ; // Visit sub-trees to capture rule references: // visit( ( AstNode ) node ) ; } public void visit( IdentifierNode node ) { baliRules.addReference( node.tok[0].getTokenName() ) ; } public void visit( RequireRuleNode node ) { String ruleName = node.tok[0].getTokenName() ; baliRules.addRequire( ruleName ) ; RequireTypeNode type = ( RequireTypeNode ) node.arg[0].arg [0] ; if ( type == null ) return ; baliRules.setType( ruleName, type.tok[1].getTokenName() ) ; } }