import type { IntervalSet } from "antlr4ng";
import type { IToolParameters } from "../tool-parameters.js";
import type { Alternative } from "../tool/Alternative.js";
import type { Grammar } from "../tool/Grammar.js";
import type { Rule } from "../tool/Rule.js";
import type { ActionAST } from "../tool/ast/ActionAST.js";
import type { BlockAST } from "../tool/ast/BlockAST.js";
import type { GrammarAST } from "../tool/ast/GrammarAST.js";
import type { CodeGenerator } from "./CodeGenerator.js";
import type { OutputModelController } from "./OutputModelController.js";
import type { Choice } from "./model/Choice.js";
import type { CodeBlockForAlt } from "./model/CodeBlockForAlt.js";
import type { ILabeledOp } from "./model/ILabeledOp.js";
import type { Lexer } from "./model/Lexer.js";
import type { LexerFile } from "./model/LexerFile.js";
import type { Parser } from "./model/Parser.js";
import type { ParserFile } from "./model/ParserFile.js";
import type { RuleFunction } from "./model/RuleFunction.js";
import type { SrcOp } from "./model/SrcOp.js";
import type { CodeBlock } from "./model/decl/CodeBlock.js";
export interface IOutputModelFactory {
    readonly controller: OutputModelController;
    readonly g: Grammar;
    getGenerator(): CodeGenerator | undefined;
    parserFile(fileName: string, toolParameters: IToolParameters): ParserFile | undefined;
    parser(file: ParserFile): Parser | undefined;
    lexerFile(fileName: string): LexerFile | undefined;
    lexer(file: LexerFile): Lexer | undefined;
    rule(r: Rule): RuleFunction | undefined;
    rulePostamble(func: RuleFunction, r: Rule): SrcOp[] | undefined;
    alternative(alt: Alternative, outerMost: boolean): CodeBlockForAlt | undefined;
    finishAlternative(blk: CodeBlockForAlt, ops: SrcOp[]): CodeBlockForAlt;
    epsilon(alt: Alternative, outerMost: boolean): CodeBlockForAlt | undefined;
    ruleRef(ID: GrammarAST, label: GrammarAST | null, args: GrammarAST | null): SrcOp[] | undefined;
    tokenRef(ID: GrammarAST, label: GrammarAST | null, args: GrammarAST | null): SrcOp[] | undefined;
    stringRef(ID: GrammarAST, label: GrammarAST | null): SrcOp[] | undefined;
    set(setAST: GrammarAST, label: GrammarAST | null, invert: boolean): SrcOp[] | undefined;
    wildcard(ast: GrammarAST, labelAST: GrammarAST | null): SrcOp[] | undefined;
    action(ast: ActionAST): SrcOp[] | undefined;
    sempred(ast: ActionAST): SrcOp[] | undefined;
    getChoiceBlock(blkAST: BlockAST, alts: CodeBlockForAlt[], label: GrammarAST | null): Choice | undefined;
    getEBNFBlock(ebnfRoot: GrammarAST | null, alts: CodeBlockForAlt[]): Choice | undefined;
    getLL1ChoiceBlock(blkAST: BlockAST, alts: CodeBlockForAlt[]): Choice | undefined;
    getComplexChoiceBlock(blkAST: BlockAST, alts: CodeBlockForAlt[]): Choice | undefined;
    getLL1EBNFBlock(ebnfRoot: GrammarAST, alts: CodeBlockForAlt[]): Choice | undefined;
    getComplexEBNFBlock(ebnfRoot: GrammarAST, alts: CodeBlockForAlt[]): Choice | undefined;
    getLL1Test(look: IntervalSet, blkAST: GrammarAST): SrcOp[] | undefined;
    needsImplicitLabel(ID: GrammarAST, op: ILabeledOp): boolean;
    getCurrentRuleFunction(): RuleFunction | undefined;
    getCurrentOuterMostAlt(): Alternative | undefined;
    getCurrentBlock(): CodeBlock | undefined;
}
