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