/*
 * Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.
 * Use of this file is governed by the BSD 3-clause license that
 * can be found in the LICENSE.txt file in the project root.
 */

package org.antlr.v4.runtime.tree;

import org.antlr.v4.runtime.ParserRuleContext;

public class ParseTreeWalker {
    public static final ParseTreeWalker DEFAULT = new ParseTreeWalker();


	
Performs a walk on the given parse tree starting at the root and going down recursively with depth-first search. On each node, enterRule is called before recursively walking down into child nodes, then exitRule is called after the recursive call to wind up.
Params:
  • listener – The listener used by the walker to process grammar rules
  • t – The parse tree to be walked on
/** * Performs a walk on the given parse tree starting at the root and going down recursively * with depth-first search. On each node, {@link ParseTreeWalker#enterRule} is called before * recursively walking down into child nodes, then * {@link ParseTreeWalker#exitRule} is called after the recursive call to wind up. * @param listener The listener used by the walker to process grammar rules * @param t The parse tree to be walked on */
public void walk(ParseTreeListener listener, ParseTree t) { if ( t instanceof ErrorNode) { listener.visitErrorNode((ErrorNode)t); return; } else if ( t instanceof TerminalNode) { listener.visitTerminal((TerminalNode)t); return; } RuleNode r = (RuleNode)t; enterRule(listener, r); int n = r.getChildCount(); for (int i = 0; i<n; i++) { walk(listener, r.getChild(i)); } exitRule(listener, r); }
Enters a grammar rule by first triggering the generic event ParseTreeListener.enterEveryRule then by triggering the event specific to the given parse tree node
Params:
  • listener – The listener responding to the trigger events
  • r – The grammar rule containing the rule context
/** * Enters a grammar rule by first triggering the generic event {@link ParseTreeListener#enterEveryRule} * then by triggering the event specific to the given parse tree node * @param listener The listener responding to the trigger events * @param r The grammar rule containing the rule context */
protected void enterRule(ParseTreeListener listener, RuleNode r) { ParserRuleContext ctx = (ParserRuleContext)r.getRuleContext(); listener.enterEveryRule(ctx); ctx.enterRule(listener); }
Exits a grammar rule by first triggering the event specific to the given parse tree node then by triggering the generic event ParseTreeListener.exitEveryRule
Params:
  • listener – The listener responding to the trigger events
  • r – The grammar rule containing the rule context
/** * Exits a grammar rule by first triggering the event specific to the given parse tree node * then by triggering the generic event {@link ParseTreeListener#exitEveryRule} * @param listener The listener responding to the trigger events * @param r The grammar rule containing the rule context */
protected void exitRule(ParseTreeListener listener, RuleNode r) { ParserRuleContext ctx = (ParserRuleContext)r.getRuleContext(); ctx.exitRule(listener); listener.exitEveryRule(ctx); } }