onelang
Version:
OneLang transpiler framework core
48 lines (47 loc) • 1.62 kB
TypeScript
import { OneAst as ast } from "../../One/Ast";
import { Reader } from "./Reader";
import { NodeManager } from "./NodeManager";
declare class Operator {
text: string;
precedence: number;
isBinary: boolean;
isRightAssoc: boolean;
isPostfix: boolean;
constructor(text: string, precedence: number, isBinary: boolean, isRightAssoc: boolean, isPostfix: boolean);
}
export interface ExpressionParserConfig {
unary: string[];
precedenceLevels: {
name: string;
operators?: string[];
binary?: boolean;
}[];
rightAssoc: string[];
aliases: {
[alias: string]: string;
};
propertyAccessOps: string[];
}
export declare class ExpressionParser {
reader: Reader;
nodeManager: NodeManager;
config: ExpressionParserConfig;
static defaultConfig(): ExpressionParserConfig;
operatorMap: {
[name: string]: Operator;
};
operators: string[];
prefixPrecedence: number;
unaryPrehook: () => ast.Expression;
infixPrehook: (left: ast.Expression) => ast.Expression;
constructor(reader: Reader, nodeManager?: NodeManager, config?: ExpressionParserConfig);
reconfigure(): void;
parseMapLiteral(keySeparator?: string, startToken?: string, endToken?: string): ast.MapLiteral;
parseArrayLiteral(startToken?: string, endToken?: string): ast.ArrayLiteral;
parseLeft(required?: boolean): ast.Expression;
parseOperator(): Operator;
parseCallArguments(): ast.Expression[];
addNode(node: ast.INode, start: number): void;
parse(precedence?: number, required?: boolean): ast.Expression;
}
export {};