import { ASTConstructorDeclaration, ASTDef, ASTDefFunction, ASTDefInteractiveProgram, ASTDefProcedure, ASTDefProgram, ASTDefType } from './ast';
import { SourceReader } from './reader';
import { Token } from './token';
declare class FieldDescriptor {
    private _typeName;
    private _constructorName;
    private _index;
    constructor(typeName: string, constructorName: string, index: number);
    get typeName(): string;
    get constructorName(): string;
    get index(): number;
}
export declare const LocalVariable: unique symbol;
export declare const LocalParameter: unique symbol;
export declare const LocalIndex: unique symbol;
export declare class SymbolTable {
    private _program;
    private _isInteractiveProgram;
    private _procedures;
    private _procedureParameters;
    private _functions;
    private _functionParameters;
    private _types;
    private _typeConstructors;
    private _constructors;
    private _constructorType;
    private _constructorFields;
    private _localNames;
    private _fields;
    constructor();
    get program(): any;
    isInteractiveProgram(): boolean;
    isProcedure(name: string): boolean;
    allProcedureNames(): string[];
    procedureDefinition(name: string): ASTDefProcedure;
    procedureParameters(name: string): string[];
    isFunction(name: string): boolean;
    allFunctionNames(): string[];
    functionDefinition(name: string): ASTDefFunction;
    functionParameters(name: string): string[];
    isType(name: string): boolean;
    typeDefinition(name: string): ASTDefType;
    typeConstructors(name: string): string[];
    isConstructor(name: string): boolean;
    constructorDeclaration(name: string): ASTConstructorDeclaration;
    constructorType(name: string): string;
    constructorFields(name: string): string[];
    isField(name: string): boolean;
    fieldDescriptor(name: string): FieldDescriptor[];
    defProgram(definition: ASTDefProgram | ASTDefInteractiveProgram): void;
    defInteractiveProgram(definition: ASTDefInteractiveProgram): void;
    defProcedure(definition: ASTDefProcedure): void;
    defFunction(definition: ASTDefFunction): void;
    defType(definition: ASTDefType): void;
    _declareConstructor(typeName: string, constructorDeclaration: ASTConstructorDeclaration): void;
    _declareField(startPos: SourceReader, endPos: SourceReader, typeName: string, constructorName: string, fieldName: string, index: number): void;
    addNewLocalName(localName: Token, category: symbol): void;
    setLocalName(localName: Token, category: symbol): void;
    removeLocalName(localName: Token): void;
    exitScope(): void;
    getAttributes(globalName: string): Record<string, ASTDef>;
}
export {};
//# sourceMappingURL=symtable.d.ts.map