import { type Expr, Tag } from './index';
declare abstract class Bin extends Tag {
    readonly left: Expr;
    readonly right: Expr;
    constructor(left: Expr, right: Expr);
}
export declare class Add extends Bin {
    readonly tag = "Add";
    eval(): Expr;
}
export declare class Mul extends Bin {
    readonly tag = "Mul";
    eval(): Expr;
}
export declare class Sub extends Bin {
    readonly tag = "Sub";
    eval(): Expr;
}
export declare class Div extends Bin {
    readonly tag = "Div";
    eval(): Expr;
}
export declare class Mod extends Bin {
    readonly tag = "Mod";
    eval(): Expr;
}
export declare class Exp extends Bin {
    readonly tag = "Exp";
    eval(): Expr;
}
declare abstract class Cmp extends Tag {
    readonly left: Expr;
    readonly right: Expr;
    readonly equal: boolean;
    constructor(left: Expr, right: Expr, equal?: boolean);
}
declare abstract class Unary extends Tag {
    readonly value: Expr;
    constructor(value: Expr);
}
declare abstract class Shift extends Tag {
    readonly value: Expr;
    readonly shift: Expr;
    constructor(value: Expr, shift: Expr);
}
export declare class Lt extends Cmp {
    readonly tag = "Lt";
    eval(): Expr;
}
export declare class Gt extends Cmp {
    readonly tag = "Gt";
    eval(): Expr;
}
export declare class Eq extends Bin {
    readonly tag = "Eq";
    eval(): Expr;
}
export declare class IsZero extends Tag {
    readonly value: Expr;
    readonly tag = "IsZero";
    constructor(value: Expr);
    eval(): Expr;
}
export declare class And extends Bin {
    readonly tag = "And";
    eval(): Expr;
}
export declare class Or extends Bin {
    readonly tag = "Or";
    eval(): Expr;
}
export declare class Xor extends Bin {
    readonly tag = "Xor";
    eval(): Expr;
}
export declare class Not extends Unary {
    readonly tag = "Not";
    eval(): Expr;
}
export declare class Byte extends Tag {
    readonly pos: Expr;
    readonly data: Expr;
    readonly tag = "Byte";
    constructor(pos: Expr, data: Expr);
    eval(): Expr;
}
export declare class Shl extends Shift {
    readonly tag = "Shl";
    eval(): Expr;
}
export declare class Shr extends Shift {
    readonly tag = "Shr";
    eval(): Expr;
}
export declare class Sar extends Shift {
    readonly tag = "Sar";
    eval(): Expr;
}
export declare class Sig extends Tag {
    readonly selector: string;
    readonly tag = "Sig";
    constructor(selector: string);
    eval(): Expr;
}
export {};
