import { AddressingMode, Directive, Mnemonic, Qualifier } from "../syntax";
export declare abstract class Node {
    type: string;
    loc: Location;
    text: string;
    constructor(start: number, text: string, type?: string);
}
export interface Location {
    start: number;
    end: number;
}
export declare class LabelNode extends Node {
    name: string;
    local: boolean;
    macro: boolean;
    constructor(start: number, text: string);
}
export declare class OpcodeNode extends Node {
    op: MnemonicNode | DirectiveNode | MacroNode;
    qualifier?: QualifierNode;
    constructor(start: number, text: string);
}
export declare class MnemonicNode extends Node {
    name: Mnemonic;
    constructor(start: number, name: Mnemonic);
}
export declare class DirectiveNode extends Node {
    name: Directive;
    constructor(start: number, name: Directive);
}
export declare class MacroNode extends Node {
    name: string;
    constructor(start: number, name: string);
}
export declare class QualifierNode extends Node {
    name: Qualifier;
    constructor(start: number, name: Qualifier);
}
export declare class EffectiveAddressNode extends Node {
    mode: AddressingMode;
    constructor(start: number, text: string);
}
export declare class StringNode extends Node {
    value: string;
    constructor(start: number, text: string);
}
export declare class MacroArgNode extends Node {
    index: number;
    constructor(start: number, text: string);
}
export declare class MacroInvocationsNode extends Node {
    constructor(start: number, text: string);
}
export declare class CommentNode extends Node {
    constructor(start: number, text: string);
}
export declare class StatementNode extends Node {
    label?: LabelNode;
    opcode?: OpcodeNode;
    operands: Node[];
    comment?: CommentNode;
    constructor(text: string);
    isLabel(): this is LabelStatement;
    isInstruction(): this is InstructionStatement;
    isDirective(): this is DirectiveStatement;
    isMacro(): this is MacroStatement;
}
export interface InstructionStatement {
    opcode: {
        op: MnemonicNode;
        qualifier?: QualifierNode;
    };
    operands: EffectiveAddressNode[];
}
export interface DirectiveStatement {
    opcode: {
        op: DirectiveNode;
        qualifier?: QualifierNode;
    };
    operands: Node[];
}
export interface MacroStatement {
    opcode: {
        op: MacroNode;
    };
    operands: Node[];
}
export interface LabelStatement {
    label: LabelNode;
}
