import Logger from '../Logger'; import LexerContext from './LexerContext'; import Token from './Token'; import TokenType from './TokenType'; declare type LexerRule = [MatchType, string[]]; declare type NestingRule = TokenType[]; declare type ReplacementRule = (token: Token, inType: TokenType | undefined, ctx: LexerContext) => void; declare enum MatchType { zero = 0, zeroOrOne = 1, zeroOrMore = 2, one = 3, oneOrMore = 4 } interface ILexerTokenRule { type: TokenType; start?: LexerRule; end?: LexerRule; endLookahead?: boolean; rules?: LexerRule[]; startOfLine?: boolean; onlyAsSubToken?: boolean; } export default class Lexer { logger: Logger; tokenRules: ILexerTokenRule[]; nestingRules: { [key: number]: NestingRule; }; replacementRules: { [key: number]: ReplacementRule; }; constructor(logger: Logger); lex(ctx: LexerContext): Promise; lexToken(index: number, inType: TokenType | undefined, ctx: LexerContext): Token | undefined; lexTokenRule(index: number, rule: ILexerTokenRule, ctx: LexerContext): Token | undefined; lexRule(index: number, rule: LexerRule, ctx: LexerContext): number | undefined; substituteToken(token: Token, value: string, ctx: LexerContext): void; applyTextReplace(text: string, regex: RegExp, value: string): string; getInStringArray(source: string): boolean[]; error(msg: string, token: Token | undefined, ctx: LexerContext): void; } export {};