@mojir/lits
Version:
Lits is a Lisp dialect implemented in TypeScript
86 lines (85 loc) • 7.07 kB
TypeScript
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 {};