From 016821207f1f2294dd09935a4c1d14d78ff3aed1 Mon Sep 17 00:00:00 2001 From: Akshay Nair Date: Thu, 13 Jan 2022 21:20:23 +0530 Subject: refactor(parser): reimplements alt parser --- src/eval/index.ts | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'src/eval/index.ts') diff --git a/src/eval/index.ts b/src/eval/index.ts index 0579579..4c47adf 100644 --- a/src/eval/index.ts +++ b/src/eval/index.ts @@ -103,13 +103,20 @@ const checkExpr = ( ) }, - _: _ => [], + // Or: ({ left, right }) => { + // return pipe( + // [], + // skip(1), + // ) + // }, + + _: _ => { throw new Error(`TODO: ${expr.tag} not implemented for match`) }, }), ) } export const matchAll = ( - [startO, exprs, endO]: ListExpr, + [startO, expr, endO]: ListExpr, list: T[], ): MatchGroupResult => { const check = (index: number, ls: T[], expr: Expr): MatchGroupIndexed[] => { @@ -125,14 +132,12 @@ export const matchAll = ( return checkExpr(expr, item, ls, index, next) } - const expr = Expr.Group({ exprs }) - return { groups: check(0, list, expr), } } -export const find = ([startO, exprs, endO]: ListExpr, list: T[]): any => { +export const find = ([startO, expr, endO]: ListExpr, list: T[]): any => { const check = (expr: Expr) => (x: T, i: number, ls: T[]): boolean => { @@ -161,7 +166,5 @@ export const find = ([startO, exprs, endO]: ListExpr, list: T[]): any => { ) } - const cs = exprs.map(check) - - return list.filter((x, i, ls) => cs.every(c => c(x, i, ls))) + return list.filter((x, i, ls) => check(expr)(x, i, ls)) } -- cgit v1.3.1