UNPKG

@mojir/lits

Version:

Lits is a Lisp dialect implemented in TypeScript

86 lines (85 loc) 7.07 kB
import type { ValidReservedSymbol } from './reservedNames'; import { type SymbolicBinaryOperator, type SymbolicOperator } from './operators'; export declare const tokenTypes: readonly ["LBrace", "LBracket", "RBrace", "RBracket", "LParen", "RParen", "BasePrefixedNumber", "MultiLineComment", "Number", "Operator", "RegexpShorthand", "ReservedSymbol", "SingleLineComment", "String", "Symbol", "Whitespace"]; export type TokenType = typeof tokenTypes[number]; declare const modifierNames: readonly ["&rest", "&let", "&when", "&while"]; export type ModifierName = typeof modifierNames[number]; type GenericToken<T extends TokenType, V extends string = string> = [T, V] | [T, V, SourceCodeInfo]; export type LBraceToken = GenericToken<'LBrace', '{'>; export type LBracketToken = GenericToken<'LBracket', '['>; export type LParenToken = GenericToken<'LParen', '('>; export type RBraceToken = GenericToken<'RBrace', '}'>; export type RBracketToken = GenericToken<'RBracket', ']'>; export type RParenToken = GenericToken<'RParen', ')'>; export type BasePrefixedNumberToken = GenericToken<'BasePrefixedNumber'>; export type MultiLineCommentToken = GenericToken<'MultiLineComment'>; export type NumberToken = GenericToken<'Number'>; export type OperatorToken<T extends SymbolicOperator = SymbolicOperator> = GenericToken<'Operator', T>; export type RegexpShorthandToken = GenericToken<'RegexpShorthand'>; export type ReservedSymbolToken<T extends ValidReservedSymbol = ValidReservedSymbol> = GenericToken<'ReservedSymbol', T>; export type SingleLineCommentToken = GenericToken<'SingleLineComment'>; export type StringToken = GenericToken<'String'>; export type SymbolToken<T extends string = string> = GenericToken<'Symbol', T>; export type WhitespaceToken = GenericToken<'Whitespace'>; export type Token = LBraceToken | LBracketToken | LParenToken | RBraceToken | RBracketToken | RParenToken | BasePrefixedNumberToken | MultiLineCommentToken | NumberToken | OperatorToken | RegexpShorthandToken | ReservedSymbolToken | SingleLineCommentToken | StringToken | SymbolToken | WhitespaceToken; export type TokenDescriptor<T extends Token> = [length: number, token?: T]; export interface SourceCodeInfo { position: { line: number; column: number; }; code: string; filePath?: string; } export declare function isSymbolToken<T extends string>(token: Token, symbolName?: T): token is SymbolToken<T>; export declare function assertSymbolToken<T extends string>(token: Token, symbolName?: T): asserts token is SymbolToken<T>; export declare function asSymbolToken<T extends string>(token: Token, symbolName?: T): SymbolToken<T>; export declare function isReservedSymbolToken<T extends ValidReservedSymbol>(token: Token, symbolName?: T): token is ReservedSymbolToken<T>; export declare function assertReservedSymbolToken<T extends ValidReservedSymbol>(token: Token, symbolName?: T): asserts token is ReservedSymbolToken<T>; export declare function asReservedSymbolToken<T extends ValidReservedSymbol>(token: Token, symbolName?: T): ReservedSymbolToken<T>; export declare function isSingleLineCommentToken(token: Token): token is SingleLineCommentToken; export declare function assertSingleLineCommentToken(token: Token): asserts token is SingleLineCommentToken; export declare function asSingleLineCommentToken(token: Token): SingleLineCommentToken; export declare function isMultiLineCommentToken(token: Token): token is MultiLineCommentToken; export declare function assertMultiLineCommentToken(token: Token): asserts token is MultiLineCommentToken; export declare function asMultiLineCommentToken(token: Token): MultiLineCommentToken; export declare function isOperatorToken<T extends SymbolicOperator>(token: Token, operatorName?: T): token is OperatorToken<T>; export declare function assertOperatorToken<T extends SymbolicOperator>(token: Token, operatorName?: T): asserts token is OperatorToken<T>; export declare function asOperatorToken<T extends SymbolicOperator>(token: Token, operatorName?: T): OperatorToken<T>; export declare function isWhitespaceToken(token: Token): token is WhitespaceToken; export declare function assertWhitespaceToken(token: Token): asserts token is WhitespaceToken; export declare function asWhitespaceToken(token: Token): WhitespaceToken; export declare function isNumberToken(token: Token): token is NumberToken; export declare function assertNumberToken(token: Token): asserts token is NumberToken; export declare function asNumberToken(token: Token): NumberToken; export declare function isBasePrefixedNumberToken(token: Token): token is BasePrefixedNumberToken; export declare function assertBasePrefixedNumberToken(token: Token): asserts token is BasePrefixedNumberToken; export declare function asBasePrefixedNumberToken(token: Token): BasePrefixedNumberToken; export declare function isLParenToken(token: Token): token is LParenToken; export declare function assertLParenToken(token: Token): asserts token is LParenToken; export declare function asLParenToken(token: Token): LParenToken; export declare function isRParenToken(token: Token): token is RParenToken; export declare function assertRParenToken(token: Token): asserts token is RParenToken; export declare function asRParenToken(token: Token): RParenToken; export declare function isLBracketToken(token: Token): token is LBracketToken; export declare function assertLBracketToken(token: Token): asserts token is LBracketToken; export declare function asLBracketToken(token: Token): LBracketToken; export declare function isRBracketToken(token: Token): token is RBracketToken; export declare function assertRBracketToken(token: Token): asserts token is RBracketToken; export declare function asRBracketToken(token: Token): RBracketToken; export declare function isLBraceToken(token: Token): token is LBraceToken; export declare function assertLBraceToken(token: Token): asserts token is LBraceToken; export declare function asLBraceToken(token: Token): LBraceToken; export declare function isRBraceToken(token: Token): token is RBraceToken; export declare function assertRBraceToken(token: Token): asserts token is RBraceToken; export declare function asRBraceToken(token: Token): RBraceToken; export declare function isStringToken(token: Token): token is StringToken; export declare function assertStringToken(token: Token): asserts token is StringToken; export declare function asStringToken(token: Token): StringToken; export declare function isRegexpShorthandToken(token: Token): token is RegexpShorthandToken; export declare function assertRegexpShorthandToken(token: Token): asserts token is RegexpShorthandToken; export declare function asRegexpShorthandToken(token: Token): RegexpShorthandToken; export declare function isA_BinaryOperatorToken(token: Token): token is OperatorToken<SymbolicBinaryOperator>; export declare function assertA_BinaryOperatorToken(token: Token): asserts token is OperatorToken<SymbolicBinaryOperator>; export declare function asA_BinaryOperatorToken(token: Token): OperatorToken<SymbolicBinaryOperator>; export {};