aboutsummaryrefslogtreecommitdiff
path: root/src/parser
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2022-01-08 21:17:10 +0530
committerAkshay Nair <phenax5@gmail.com>2022-01-08 21:17:10 +0530
commitb3b2c39df680f88e1e6d3615245754ae5f0380d0 (patch)
tree4af350ce393244d2c8dbcfdb0bd46cbb91ee41ef /src/parser
parente246f2341ee13926f4273c6d634cef4fe07f040e (diff)
downloadelxr-b3b2c39df680f88e1e6d3615245754ae5f0380d0.tar.gz
elxr-b3b2c39df680f88e1e6d3615245754ae5f0380d0.zip
feat(eval): implements object property matching
Diffstat (limited to 'src/parser')
-rw-r--r--src/parser/index.ts30
-rw-r--r--src/parser/utils.ts16
2 files changed, 29 insertions, 17 deletions
diff --git a/src/parser/index.ts b/src/parser/index.ts
index 2f5781e..386fa94 100644
--- a/src/parser/index.ts
+++ b/src/parser/index.ts
@@ -30,8 +30,8 @@ const anyBool = mapTo(symbol('\\b'), _ => Expr.AnyBool(null))
const truthy = mapTo(symbol('\\T'), _ => Expr.Truthy(null))
const falsey = mapTo(symbol('\\F'), _ => Expr.Falsey(null))
-const wrapQuantifiers: (e: ParserResult<Expr>) => ParserResult<Expr> =
- chain(([expr, input]) =>
+const wrapQuantifiers: (e: ParserResult<Expr>) => ParserResult<Expr> = chain(
+ ([expr, input]) =>
pipe(
input,
or([
@@ -41,7 +41,7 @@ const wrapQuantifiers: (e: ParserResult<Expr>) => ParserResult<Expr> =
]),
orElse(_ => right([expr, input])),
),
- )
+)
const wrapAlt: (e: ParserResult<Expr>) => ParserResult<Expr> = chain(
([expr, input]) =>
@@ -63,12 +63,18 @@ export const propertyName: Parser<string> = pipe(
p => suffixed(p, whitespaces0),
)
-const objectProperty = (input: string) => pipe(
- input,
- mapTo(delimited(symbol('['), pair(propertyName, many0(expressionP)), symbol(']')), ([name, exprs]) =>
- Expr.PropertyMatch({ name, exprs }),
- ),
-)
+const objectProperty = (input: string) =>
+ pipe(
+ input,
+ mapTo(
+ delimited(
+ symbol('['),
+ pair(propertyName, many0(expressionP)),
+ symbol(']'),
+ ),
+ ([name, exprs]) => Expr.PropertyMatch({ name, exprs }),
+ ),
+ )
const expressionP: Parser<Expr> = (input: string) =>
pipe(
@@ -90,7 +96,11 @@ const expressionP: Parser<Expr> = (input: string) =>
wrapAlt,
)
-export const parser: Parser<ListExpr> = tuple3(optional(start), many1(expressionP), optional(end))
+export const parser: Parser<ListExpr> = tuple3(
+ optional(start),
+ many1(expressionP),
+ optional(end),
+)
/*
diff --git a/src/parser/utils.ts b/src/parser/utils.ts
index 9e05286..841d77c 100644
--- a/src/parser/utils.ts
+++ b/src/parser/utils.ts
@@ -40,14 +40,16 @@ export const many0 = <T>(parser: Parser<T>): Parser<Array<T>> =>
)
export const many1 = <T>(parser: Parser<T>): Parser<Array<T>> =>
- recoverInput(flow(
- many0(parser),
- chain(([res, inp]) =>
- res.length > 0
- ? right([res, inp])
- : left([`many1 failed to parse at ${inp}`, inp]),
+ recoverInput(
+ flow(
+ many0(parser),
+ chain(([res, inp]) =>
+ res.length > 0
+ ? right([res, inp])
+ : left([`many1 failed to parse at ${inp}`, inp]),
+ ),
),
- ))
+ )
const recoverInput =
<T>(p: Parser<T>): Parser<T> =>