import { TextDocument } from "vscode-languageserver/node";
import { SystemVerilogSymbol, SystemVerilogSymbolJSON } from "./svsymbol";
import { MacroInfo, PreprocCacheEntry, TokenOrderEntry } from "./svpreprocessor";
declare class ParseToken {
    text: string;
    scopes: string[];
    startTokenIndex: number;
    endTokenIndex: number;
}
export declare class SystemVerilogParser {
    private _completionGrammarEngine;
    private _anonStructUnionCount;
    private _anonEnumCount;
    private _document;
    private _documentPath;
    private _preprocCache;
    private _fileSymbolsInfo;
    private _svtokens;
    private _tokenOrder;
    private _containerStack;
    private _currTokenNum;
    private _debugContainerInfo;
    private _debugFileInfo;
    tokenize(_text: string, includeFilePaths: string[], userDefinesMacroInfo: Map<string, MacroInfo>): [ParseToken[], TokenOrderEntry[], SystemVerilogSymbol[]];
    private _getElem;
    private _getTokenOrderIndex;
    private _getEndPosition;
    private _getDefLocations;
    private _getDocumentFromTokenOrderIndex;
    private _createSymbol;
    private _pushSymbol;
    private _pushContainerSymbol;
    private _notIgnorableScope;
    private _nextNonIgnorableScope;
    private _printDebugInfo;
    private _processTypeReference;
    private _processGenericPortList;
    private _processParameterPortList;
    private _processPortList;
    private _processContainerHeader;
    private _processPackageHeader;
    private _processRoutineHeader;
    private _processEndIdentifier;
    private _processStartIdentifier;
    private _processDimension;
    private _processParamPortDeclaration;
    private _processRoutineVarDeclaration;
    private _processRoutineBody;
    private _processRoutine;
    private _processParamDeclaration;
    private _processModPortDeclaration;
    private _processStructUnionMemberList;
    private _processStructUnionDeclaration;
    private _processEnumList;
    private _processEnumDeclaration;
    private _processTypeDef;
    private _ignoreBlockStatement;
    private _ignoreParanthesizedExpression;
    private _ignoreTillSemiColon;
    private _ignoreTillColon;
    private _ignoreActionBlock;
    private _ignoreStatement;
    private _processPreprocessor;
    private _processAttributeInstance;
    private _processSimpleKeywords;
    private _processPortDeclaration;
    private _processParameterOverride;
    private _processCheckerDeclaration;
    private _processImportExport;
    private _processExternConstraintDeclaration;
    private _processClassDeclaration;
    private _processCoverGroupDeclaration;
    private _processPropertyDeclaration;
    private _processSequenceDeclaration;
    private _processLetDeclaration;
    private _processClockingDeclaration;
    private _processDefaultDisableItem;
    private _processAssertionStatement;
    private _processBindDirective;
    private _processContinuousAssign;
    private _processAlias;
    private _processSequentialBlock;
    private _processGenerateBlock;
    private _processLoopGenerateConstruct;
    private _processIfGenerateConstruct;
    private _processCaseGenerateConstruct;
    private _processEmptyStatement;
    private _processNonStandardBeginEndBlock;
    private _processExternTFDeclaration;
    private _printParsingFailedMessage;
    private _processGenerateRegion;
    private _processElaborationSystemTask;
    private _isDriveStrength;
    private _isInstance;
    private _processVarInstDeclaration;
    private _processModuleCommonItem;
    private _processGenerateItem;
    private _processSpecifyBlock;
    private _processSpecparamDeclaration;
    private _processTimeunitsDeclaration;
    parse(document: TextDocument, includeFilePaths: string[], preprocCache: Map<string, PreprocCacheEntry>, userDefinesMacroInfo: Map<string, MacroInfo>, _precision?: string, _maxDepth?: number, text?: string): [SystemVerilogParser.SystemVerilogFileSymbolsInfo, string[]];
    static preprocCacheToJSON(preprocCache: Map<string, PreprocCacheEntry>): Map<any, any> | (string | (string | TextDocument | import("./svpreprocessor").PreprocIncInfoJSON)[])[][];
    static preprocCacheFromJSON(preprocCacheJSON: any): Map<string, PreprocCacheEntry>;
}
export declare namespace SystemVerilogParser {
    enum ContainerInfoIndex {
        Symbols = 0,
        Imports = 1,
        Containers = 2,
        Exports = 3
    }
    enum FileInfoIndex {
        Containers = 0,
        Includes = 1,
        Imports = 2,
        Exports = 3,
        Symbols = 4
    }
    type SystemVerilogPosition = {
        file?: string;
        line: number;
        character: number;
    };
    type SystemVerilogSymbolInfo = SystemVerilogSymbol;
    type SystemVerilogImportInfo = {
        pkg: string;
        symbolsText: string[];
    };
    type SystemVerilogExportInfo = {
        pkg: string;
        symbolsText: string[];
    };
    type SystemVerilogIncludeInfo = string;
    type SystemVerilogSymbolsInfo = SystemVerilogSymbolInfo[];
    type SystemVerilogImportsInfo = SystemVerilogImportInfo[];
    type SystemVerilogExportsInfo = SystemVerilogExportInfo[];
    type SystemVerilogContainerSymbolsInfo = {
        symbolsInfo?: SystemVerilogSymbolsInfo;
        importsInfo?: SystemVerilogImportsInfo;
        containersInfo?: SystemVerilogContainersInfo;
        exportsInfo?: SystemVerilogExportsInfo;
    };
    type SystemVerilogContainerInfo = {
        symbol: SystemVerilogSymbol;
        position: SystemVerilogPosition;
        info: SystemVerilogContainerSymbolsInfo;
    };
    type SystemVerilogContainersInfo = SystemVerilogContainerInfo[];
    type SystemVerilogIncludesInfo = SystemVerilogIncludeInfo[];
    type SystemVerilogFileSymbolsInfo = {
        containersInfo?: SystemVerilogContainersInfo;
        includesInfo?: SystemVerilogIncludesInfo;
        symbolsInfo?: SystemVerilogSymbolsInfo;
        importsInfo?: SystemVerilogImportsInfo;
        exportsInfo?: SystemVerilogExportsInfo;
    };
    type SystemVerilogPositionJSON = [number, number] | [string, [number, number]];
    type SystemVerilogSymbolInfoJSON = SystemVerilogSymbolJSON;
    type SystemVerilogImportInfoJSON = [string, string[]];
    type SystemVerilogExportInfoJSON = [string, string[]];
    type SystemVerilogImportsInfoJSON = SystemVerilogImportInfoJSON[];
    type SystemVerilogExportsInfoJSON = SystemVerilogExportInfoJSON[];
    type SystemVerilogSymbolsInfoJSON = SystemVerilogSymbolInfoJSON[];
    type SystemVerilogContainerSymbolsInfoJSON = (SystemVerilogSymbolsInfoJSON | SystemVerilogImportsInfoJSON | SystemVerilogContainersInfoJSON | SystemVerilogExportsInfoJSON)[];
    type SystemVerilogContainerInfoJSON = [[SystemVerilogSymbolJSON, SystemVerilogPositionJSON], SystemVerilogContainerSymbolsInfoJSON];
    type SystemVerilogContainersInfoJSON = SystemVerilogContainerInfoJSON[];
    type SystemVerilogFileSymbolsInfoJSON = (SystemVerilogContainersInfoJSON | SystemVerilogIncludesInfo | SystemVerilogSymbolsInfoJSON | SystemVerilogImportsInfoJSON | SystemVerilogExportsInfoJSON)[];
    function fileTopSymbols(fileSymbolsInfo: SystemVerilogFileSymbolsInfo, strict?: Boolean): SystemVerilogSymbol[];
    function fileContainers(fileSymbolsInfo: SystemVerilogFileSymbolsInfo): SystemVerilogContainersInfo;
    function fileAllSymbols(fileSymbolsInfo: SystemVerilogFileSymbolsInfo, strict?: Boolean): SystemVerilogSymbol[];
    function containerAllContainers(containerSymbolsInfo: SystemVerilogContainerSymbolsInfo): SystemVerilogSymbol[];
    function containerContainers(containerInfo: SystemVerilogContainerInfo): SystemVerilogContainersInfo;
    function containerTopSymbols(containerInfo: SystemVerilogContainerInfo): SystemVerilogSymbol[];
    function containerAllSymbols(containerInfo: SystemVerilogContainerInfo, topOnly?: boolean): SystemVerilogSymbol[];
    function fileAllContainers(fileSymbolsInfo: SystemVerilogFileSymbolsInfo): SystemVerilogSymbol[];
    function findFileContainer(fileSymbolsInfo: SystemVerilogFileSymbolsInfo, cntnrName: string): SystemVerilogContainerInfo;
    function findContainerSymbol(containerSymbolsInfo: SystemVerilogContainerSymbolsInfo, symbolName: string, findContainer: Boolean): SystemVerilogSymbol | SystemVerilogContainerInfo;
    function getInstSymbolsInContainer(containerSymbolsInfo: SystemVerilogContainerSymbolsInfo): SystemVerilogSymbol[];
    function findSymbol(fileSymbolsInfo: SystemVerilogFileSymbolsInfo, symbolName: string, findContainer: Boolean): SystemVerilogSymbol | SystemVerilogContainerInfo;
    function jsonToPosition(jsonPosition: SystemVerilogParser.SystemVerilogPositionJSON): SystemVerilogPosition;
    function jsonToFileSymbolsInfo(file: string, jsonFileSymbolsInfo: SystemVerilogParser.SystemVerilogFileSymbolsInfoJSON): SystemVerilogFileSymbolsInfo;
    function fileSymbolsInfoToJson(fileSymbolsInfo: SystemVerilogParser.SystemVerilogFileSymbolsInfo): SystemVerilogFileSymbolsInfoJSON;
    function preprocToFileSymbolsInfo(symbols: SystemVerilogSymbol[], includes?: Set<string>): SystemVerilogFileSymbolsInfo;
    function containerImports(containerSymbolsInfo: SystemVerilogContainerSymbolsInfo, topOnly?: boolean): SystemVerilogImportsInfo;
    function fileAllImports(fileSymbolsInfo: SystemVerilogFileSymbolsInfo): SystemVerilogImportsInfo;
    function containerExports(containerSymbolsInfo: SystemVerilogContainerSymbolsInfo): SystemVerilogExportsInfo;
}
export {};
