import { ST, type IST, type STGroup } from "stringtemplate4ts";
import { Grammar } from "../tool/Grammar.js";
import { Target } from "./Target.js";
import type { IToolParameters } from "../tool-parameters.js";
export declare const targetLanguages: readonly ["Cpp", "CSharp", "Dart", "Go", "JavaScript", "Java", "PHP", "Python3", "Swift", "TypeScript"];
export type SupportedLanguage = typeof targetLanguages[number];
/**  General controller for code gen.  Can instantiate sub generator(s). */
export declare class CodeGenerator {
    private static readonly vocabFilePattern;
    private static languageMap;
    target: Target;
    readonly g?: Grammar;
    readonly language: SupportedLanguage;
    private readonly tool?;
    private readonly lineWidth;
    constructor(grammarOrLanguage: Grammar | SupportedLanguage);
    get templates(): STGroup;
    generateLexer(toolParameters: IToolParameters, header?: boolean): IST;
    generateParser(toolParameters: IToolParameters, header?: boolean): IST;
    generateListener(toolParameters: IToolParameters, header?: boolean): IST;
    generateBaseListener(toolParameters: IToolParameters, header?: boolean): IST;
    generateVisitor(toolParameters: IToolParameters, header?: boolean): IST;
    generateBaseVisitor(toolParameters: IToolParameters, header?: boolean): IST;
    writeRecognizer(outputFileST: IST, header: boolean): void;
    writeListener(outputFileST: IST, header: boolean): void;
    writeBaseListener(outputFileST: IST, header: boolean): void;
    writeVisitor(outputFileST: IST, header: boolean): void;
    writeBaseVisitor(outputFileST: IST, header: boolean): void;
    writeVocabFile(): void;
    write(code: IST, fileName: string): void;
    getRecognizerFileName(header?: boolean): string;
    getListenerFileName(header?: boolean): string;
    getVisitorFileName(header?: boolean): string;
    getBaseListenerFileName(header?: boolean): string;
    getBaseVisitorFileName(header?: boolean): string;
    /**
     * What is the name of the vocab file generated for this grammar?
     *
     * @returns undefined if no ".tokens" file should be generated.
     */
    getVocabFileName(): string | undefined;
    getHeaderFileName(): string | undefined;
    /**
     * Generates a token vocab file with all the token names/types. For example:
     * ```
     *  ID=7
     *  FOR=8
     *  'for'=8
     * ```
     * This is independent of the target language and used by antlr internally.
     *
     * @returns The token vocab file as a string template.
     */
    protected getTokenVocabOutput(): ST;
    private createController;
    private walk;
    private ensureAtnExists;
}
