-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathsubscript.d.ts
More file actions
46 lines (40 loc) · 1.7 KB
/
subscript.d.ts
File metadata and controls
46 lines (40 loc) · 1.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// AST node types
export type Identifier = string;
export type Literal = [undefined, any];
export type Operation = [string, ...AST[]];
export type AST = Identifier | Literal | Operation;
// Evaluator function
export type Evaluator = (ctx?: any) => any;
// Operator compiler: receives args, returns evaluator
export type Operator = (...args: AST[]) => Evaluator | undefined;
// Parse exports
export let idx: number;
export let cur: string;
export function parse(s: string): AST;
export function err(msg?: string, at?: number): never;
export function loc<T>(node: T, at?: number): T;
export function next(is: (c: number) => number, from?: number): string;
export function skip(n?: number): string;
export function seek(n: number): number;
export function expr(prec?: number, end?: number): AST;
export const lookup: ((a: AST, prec: number, op?: string) => AST)[];
export function token(op: string, prec?: number, map?: (a: AST) => AST): void;
export function binary(op: string, prec: number, right?: boolean): void;
export function unary(op: string, prec: number, post?: boolean): void;
export function literal(op: string, val: any): void;
export function nary(op: string, prec: number, right?: boolean): void;
export function group(op: string, prec: number): void;
export function access(op: string, prec: number): void;
// Compile exports
export const operators: Record<string, Operator>;
export function operator(op: string, fn: Operator): void;
export function compile(node: AST): Evaluator;
// Default export
export default parse;
// subscript template tag
interface Subscript {
(strings: TemplateStringsArray, ...values: any[]): Evaluator;
(s: string): Evaluator;
}
declare const subscript: Subscript;
export { subscript };