import { LogicScriptBooleanExpression } from '../../Scripting/LogicScriptParserTypes'; import { LogicProgram, LogicConditionClause, LogicCommand } from '../../Types/Logic'; import { WordList } from '../../Types/WordList'; import { BasicBlockGraph } from './ControlFlowAnalysis'; import { LogicLabel } from './LogicDecompile'; export declare type CodeGenerationContext = { logic: LogicProgram; wordList: WordList; }; export declare function generateBooleanExpression(clauses: LogicConditionClause[], context: CodeGenerationContext): LogicScriptBooleanExpression; export declare function generateLogicCommandCode(instruction: LogicCommand, context: CodeGenerationContext): string; export declare function generateLogicMessages(logic: LogicProgram): string; export declare function generateLogicAsm(logic: LogicProgram, wordList: WordList, labels?: LogicLabel[]): string; export declare class LogicScriptGenerator { private graph; private context; private dominatorTree; private postDominatorTree; private visited; constructor(graph: BasicBlockGraph, context: CodeGenerationContext); generateCode(): string; private removeUnusedLabels; private removeRedundantJumps; private removeEmptyThenWithElse; private dominates; private immediatelyDominates; private postDominates; private immediatelyPostDominates; private generateCodeForBasicBlock; private generatePreamble; private generateSinglePathCode; private generateGoto; private generateIfCode; private generateBranchCode; private findBasicBlockLabel; } export declare function generateCodeForLogicProgram(logic: LogicProgram, wordList: WordList): [string, BasicBlockGraph];