import { Tool } from "../Tool.js";
import { CommonTree } from "../tree/CommonTree.js";
import { Grammar } from "./Grammar.js";
import { GrammarAST } from "./ast/GrammarAST.js";
import { GrammarRootAST } from "./ast/GrammarRootAST.js";
/** Handle left-recursion and block-set transforms */
export declare class GrammarTransformPipeline {
    private g;
    private tool;
    constructor(g: Grammar, tool: Tool);
    /**
     * Utility visitor that sets grammar ptr in each node
     *
     * @param g The grammar to set.
     * @param tree The tree to visit.
     */
    static setGrammarPtr(g: Grammar, tree: GrammarAST): void;
    static augmentTokensWithOriginalPosition(g: Grammar, tree: GrammarAST): void;
    process(): void;
    reduceBlocksToSets(root: CommonTree): void;
    /**
     * Merges all the rules, token definitions, and named actions from imported grammars into the root grammar tree.
     * Perform:
     *
     * (tokens { X (= Y 'y')) + (tokens { Z )	->	(tokens { X (= Y 'y') Z)
     * (@ members {foo}) + (@ members {bar})	->	(@ members {foobar})
     * (RULES (RULE x y)) + (RULES (RULE z))	->	(RULES (RULE x y z))
     * Rules in root prevent same rule from being appended to RULES node.
     *
     * The goal is a complete combined grammar so we can ignore subordinate grammars.
     *
     * @param rootGrammar The root grammar to integrate the imported grammars into.
     */
    integrateImportedGrammars(rootGrammar: Grammar): void;
    /**
     * Build lexer grammar from combined grammar that looks like:
     *
     * (COMBINED_GRAMMAR A
     *     (tokens { X (= Y 'y'))
     *     (OPTIONS (= x 'y'))
     *     (@ members {foo})
     *     (@ lexer header {package jj;})
     *     (RULES (RULE .+)))
     *
     * Move rules and actions to new tree, don't dup. Split AST apart. We'll have this grammar to share token symbols
     * later. Don't generate  tokenVocab or tokens{} section. Copy over named actions.
     *
     * Side-effects: it removes children from GRAMMAR & RULES nodes in combined AST. Anything cut out is dup'd before
     * adding to lexer to avoid "who's ur daddy" issues.
     *
     * @param combinedGrammar The combined grammar to extract the implicit lexer from.
     *
     * @returns The lexer grammar AST.
     */
    extractImplicitLexer(combinedGrammar: Grammar): GrammarRootAST | undefined;
}
