import { Ast, Syntax } from 'thingtalk';
declare type ScopeMap = Record<string, string>;
export declare class Describer {
    private _;
    locale: string;
    timezone: string | undefined;
    private _langPack;
    private _entityAllocator;
    private _direction;
    private _format;
    private _interp;
    private _datasets;
    constructor(locale: string, timezone: string | undefined, entityAllocator: Syntax.SequentialEntityAllocator, direction?: 'user' | 'agent');
    setDataset(kind: string, dataset: Ast.Dataset): void;
    setFullDataset(datasets: Ast.Dataset[]): void;
    private _displayLocation;
    private _getEntity;
    private _describeTime;
    private _describeDate;
    describeArg(arg: Ast.Value, scope?: ScopeMap): string;
    private _describeArg;
    private _describeOperator;
    private _compoundTypeToSchema;
    private _describeAtomFilter;
    describeFilter(expr: Ast.BooleanExpression, schema?: Ast.FunctionDef | null, scope?: ScopeMap, canonical_overwrite?: ScopeMap): string;
    private _getDeviceAttribute;
    private _computeParamMatchingScore;
    private _findBestExampleUtterance;
    describePrimitive(obj: Ast.Invocation | Ast.ExternalBooleanExpression | Ast.FunctionCallExpression, scope?: ScopeMap): string;
    private _describeIndex;
    private _describeFilteredTable;
    describeQuery(table: Ast.Expression): string;
    private __describeArgList;
    private _describeTimer;
    private _describeAtTimer;
    describeStream(stream: Ast.Expression): string;
    describeAction(action: Ast.Expression): string;
    private _describeExpression;
    describeExpressionStatement(r: Ast.ExpressionStatement): string;
    private _describeAssignment;
    describeProgram(program: Ast.Program): string;
    describePermissionFunction(permissionFunction: Ast.PermissionFunction, functionType: 'query' | 'action', scope: ScopeMap): string;
    describePermissionRule(permissionRule: Ast.PermissionRule): string;
    private _describeSpecial;
    private _describeControlCommand;
    describe(input: Ast.Input): string;
}
export declare function getProgramName(program: Ast.Program): string;
export {};
