public void buildLexerRuleActions(Lexer lexer, final Rule r) {
		if (r.actions.isEmpty()) {
			return;
		}

		CodeGenerator gen = delegate.getGenerator();
		Grammar g = delegate.getGrammar();
		String ctxType = gen.getTarget().getRuleFunctionContextStructName(r);
		RuleActionFunction raf = lexer.actionFuncs.get(r);
		if ( raf==null ) {
			raf = new RuleActionFunction(delegate, r, ctxType);
		}

		for (ActionAST a : r.actions) {
			if ( a instanceof PredAST ) {
				PredAST p = (PredAST)a;
				RuleSempredFunction rsf = lexer.sempredFuncs.get(r);
				if ( rsf==null ) {
					rsf = new RuleSempredFunction(delegate, r, ctxType);
					lexer.sempredFuncs.put(r, rsf);
				}
				rsf.actions.put(g.sempreds.get(p), new Action(delegate, p));
			}
			else if ( a.getType()== ANTLRParser.ACTION ) {
				raf.actions.put(g.lexerActions.get(a), new Action(delegate, a));
			}
		}

		if (!raf.actions.isEmpty() && !lexer.actionFuncs.containsKey(r)) {
			// only add to lexer if the function actually contains actions
			lexer.actionFuncs.put(r, raf);
		}
	}
Create RuleFunction per rule and update sempreds,actions of parser
 output object with stuff found in r.
tool/src/org/antlr/v4/codegen/OutputModelController.java