@thi.ng/sexpr
Version:
Extensible S-Expression parser & runtime infrastructure
99 lines • 2.28 kB
TypeScript
import type { Fn2 } from "@thi.ng/api";
export interface SyntaxOpts {
/**
* An array of string pairs defining possible S-expression / scope
* delimiters `[open, close]`. By default only the classic `["(",")"]` pair
* is defined. Only single character delimiters are supported.
*
* {@link DEFAULT_SYNTAX}
*/
scopes: string[][];
/**
* Regex to identify whitespace a single whitespace character. Default:
* space, tab, newline, comma
*/
whiteSpace: RegExp;
/**
* Single character string to delineate string values. Default: `"`
*/
string: string;
/**
* Single character string for comments (always active until next line
* break) Default: `;`
*/
comment: string;
}
export interface Token {
/**
* Token value
*/
value: string;
/**
* Token's start line
*/
line: number;
/**
* Token's start column
*/
col: number;
}
export type NodeType = "root" | "expr" | "sym" | "str" | "num";
export type ASTNode = Root | Expression | Sym | Str | Numeric;
/**
* Base interface for custom AST nodes
*/
export interface INode {
type: string;
parent?: INode;
}
export interface Root extends INode {
type: "root";
children: ASTNode[];
}
/**
* AST Node defining an S-expression.
*/
export interface Expression extends INode {
type: "expr";
/**
* Child nodes
*/
children: ASTNode[];
/**
* Scope type char (as per configured syntax)
*/
value: string;
}
/**
* AST symbol node. Merely holds symbol name.
*/
export interface Sym extends INode {
type: "sym";
value: string;
}
/**
* AST string node. Merely wraps string value.
*/
export interface Str extends INode {
type: "str";
value: string;
}
/**
* AST numeric node. Merely wraps parsed numeric value.
*/
export interface Numeric extends INode {
type: "num";
value: number;
}
/**
* Type hinted runtime implementations.
*/
export interface Implementations<ENV, RES> {
root: Fn2<Root, ENV, RES>;
expr: Fn2<Expression, ENV, RES>;
sym: Fn2<Sym, ENV, RES>;
str: Fn2<Str, ENV, RES>;
num: Fn2<Numeric, ENV, RES>;
}
export declare const DEFAULT_SYNTAX: SyntaxOpts;
//# sourceMappingURL=api.d.ts.map