From de5d3de99afae3cb7f1dc56fe8781394f8614a50 Mon Sep 17 00:00:00 2001 From: Akshay Nair Date: Fri, 14 Jan 2022 18:36:34 +0530 Subject: refactor: removes filter function --- src/parser/index.ts | 64 +++++++++++++++++++++++++++++++++-------------------- 1 file changed, 40 insertions(+), 24 deletions(-) (limited to 'src/parser') diff --git a/src/parser/index.ts b/src/parser/index.ts index 50f2786..cbdc02b 100644 --- a/src/parser/index.ts +++ b/src/parser/index.ts @@ -22,8 +22,8 @@ import { whitespaces0, } from './utils' import { Expr, ListExpr, Literal } from '../types' -import {getOrElse, map} from 'fp-ts/lib/Option' -import {mapFst, snd} from 'fp-ts/lib/Tuple' +import { getOrElse, map } from 'fp-ts/lib/Option' +import { mapFst, snd } from 'fp-ts/lib/Tuple' const start = mapTo(symbol('^'), _ => Expr.Start()) const end = mapTo(symbol('$'), _ => Expr.End()) @@ -65,17 +65,20 @@ const objectProperty = (input: string) => pair(propertyName, many0(expressionP)), symbol(']'), ), - ([name, exprs]) => Expr.PropertyMatch({ name, expr: exprsToGroup(exprs) }), + ([name, exprs]) => + Expr.PropertyMatch({ name, expr: exprsToGroup(exprs) }), ), ) -const unsignedNum: Parser = mapTo(pair(digits, optional(pair(matchChar('.'), digits))), ([int, decimal]) => - pipe( - decimal, - map(snd), - getOrElse(() => '0'), - n => parseFloat(`${int}.${n}`), - ) +const unsignedNum: Parser = mapTo( + pair(digits, optional(pair(matchChar('.'), digits))), + ([int, decimal]) => + pipe( + decimal, + map(snd), + getOrElse(() => '0'), + n => parseFloat(`${int}.${n}`), + ), ) const numberLiteral: Parser = mapTo( @@ -86,8 +89,7 @@ const numberLiteral: Parser = mapTo( getOrElse(() => '+'), sign => (sign === '-' ? -1 : 1) * n, Literal.Number, - ) - , + ), ) const booleanLiteral: Parser = mapTo(oneOf(['true', 'false']), b => @@ -100,25 +102,38 @@ const literalP: Parser = delimited( whitespaces0, ) -const infixOp = (op: Parser): Parser => (input: string) => pipe( - input, - sepBy1(op, groupP), - chain(([exprs, nextInput]) => exprs.length === 1 - ? left(['Infix operator parsing error', input]) - : right([exprs, nextInput])), -) +const infixOp = + (op: Parser): Parser => + (input: string) => + pipe( + input, + sepBy1(op, groupP), + chain(([exprs, nextInput]) => + exprs.length === 1 + ? left(['Infix operator parsing error', input]) + : right([exprs, nextInput]), + ), + ) -const altP: Parser = mapTo(infixOp(symbol('|')), exprs => Expr.Or({ exprs })) +const altP: Parser = mapTo(infixOp(symbol('|')), exprs => + Expr.Or({ exprs }), +) -const sequenceP: Parser = mapTo(infixOp(symbol(',')), exprs => Expr.Sequence({ exprs })) +const sequenceP: Parser = mapTo(infixOp(symbol(',')), exprs => + Expr.Sequence({ exprs }), +) -const expressionP: Parser = (input: string) => or([ altP, sequenceP, groupP ])(input) +const expressionP: Parser = (input: string) => + or([altP, sequenceP, groupP])(input) const atomP: Parser = (input: string) => pipe( input, or([ - mapTo(delimited(symbol('('), many1(expressionP), symbol(')')), exprsToGroup), + mapTo( + delimited(symbol('('), many1(expressionP), symbol(')')), + exprsToGroup, + ), objectProperty, anyItem, anyString, @@ -131,7 +146,8 @@ const atomP: Parser = (input: string) => wrapQuantifiers, ) -const exprsToGroup = (exprs: Expr[]) => exprs.length === 1 ? exprs[0] : Expr.Group({ exprs }) +const exprsToGroup = (exprs: Expr[]) => + exprs.length === 1 ? exprs[0] : Expr.Group({ exprs }) const groupP: Parser = mapTo(many1(atomP), exprsToGroup) export const parser: Parser = tuple3( -- cgit v1.3.1