// side-effect: updates Alternative with refs in actions public static void TrackTokenRuleRefsInActions(Grammar g) { foreach (Rule r in g.rules.Values) { for (int i = 1; i <= r.numberOfAlts; i++) { Alternative alt = r.alt[i]; foreach (ActionAST a in alt.actions) { ActionSniffer sniffer = new ActionSniffer(g, r, alt, a, a.Token); sniffer.ExamineAction(); } } } }