From f41f4024e72285e19cf3c97aefb5351c4abf5459 Mon Sep 17 00:00:00 2001 From: marihachi Date: Sat, 19 Aug 2023 19:12:42 +0900 Subject: [PATCH] refactor parser --- src/string-parsers.ts | 24 ++++++++++++------------ src/token-parsers.ts | 24 ++++++++++++------------ 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/string-parsers.ts b/src/string-parsers.ts index 2198efe..ee54af9 100644 --- a/src/string-parsers.ts +++ b/src/string-parsers.ts @@ -79,7 +79,7 @@ export class Parser { * * @public */ - parse(input: string, state: any = {}): Result { + parse(input: string, state: Record = {}): Result { const parser = seq([this, eof], 0); return parser.exec(input, state, 0); } @@ -89,7 +89,7 @@ export class Parser { * * @public */ - find(input: string, state: any = {}): { index: number, input: string, result: Result } | undefined { + find(input: string, state: Record = {}): { index: number, input: string, result: Result } | undefined { for (let i = 0; i < input.length; i++) { const innerState = Object.assign({}, state); const result = this.exec(input, innerState, i); @@ -105,7 +105,7 @@ export class Parser { * * @public */ - findAll(input: string, state: any = {}): { index: number, input: string, result: Result }[] { + findAll(input: string, state: Record = {}): { index: number, input: string, result: Result }[] { const results = []; for (let i = 0; i < input.length; i++) { const innerState = Object.assign({}, state); @@ -177,7 +177,7 @@ export class Parser { * * @public */ - state(key: string, value: (state: any) => any): Parser { + state(key: string, value: (state: Record) => any): Parser { return createParser((input, index, state) => { const storedValue = state[key]; state[key] = value(state); @@ -228,7 +228,7 @@ export type LazyParserOpts = { * * @public */ -export type ParserHandler = (input: string, index: number, state: any) => Result; +export type ParserHandler = (input: string, index: number, state: Record) => Result; /** * @internal @@ -313,19 +313,19 @@ function many(parser: Parser, opts: { min?: number, max?: number, notMatch * * @public */ -export function seq[]>(parsers: [...U]): Parser> +export function seq[]>(parsers: [...U]): Parser> /** * Create a new parser that sequentially applies an array of parser. * * @public * @param select - The index of the data returned in the result. */ -export function seq[], V extends number>(parsers: [...U], select: V): U[V] -export function seq(parsers: Parser[], select?: number) { +export function seq[], V extends number>(parsers: [...U], select: V): U[V] +export function seq(parsers: Parser[], select?: number) { return (select == null) ? seqAll(parsers) : seqSelect(parsers, select); } -function seqAll[]>(parsers: [...U]): Parser> { +function seqAll[]>(parsers: [...U]): Parser> { return createParser((input, index, state) => { let result; let latestIndex = index; @@ -342,7 +342,7 @@ function seqAll[]>(parsers: [...U]): Parser[], V extends number>(parsers: [...U], select: V): U[V] { +function seqSelect[], V extends number>(parsers: [...U], select: V): U[V] { return seqAll(parsers).map(values => values[select]); } @@ -427,7 +427,7 @@ export function notMatch(parser: Parser): Parser { * * @public */ -export function where(condition: (state: any) => boolean, parser: Parser): Parser { +export function where(condition: (state: Record) => boolean, parser: Parser): Parser { return createParser((input, index, state) => { return condition(state) ? parser.exec(input, state, index) @@ -463,7 +463,7 @@ export const eof = createParser((input, index, _state) => { * @public */ export function language>(source: LanguageSource): U { - const lang: Record> = {}; + const lang: Record> = {}; for (const key of Object.keys(source)) { lang[key] = lazy(() => { const parser = (source as any)[key](lang); diff --git a/src/token-parsers.ts b/src/token-parsers.ts index bc7fc86..70e7596 100644 --- a/src/token-parsers.ts +++ b/src/token-parsers.ts @@ -79,7 +79,7 @@ export class Parser { * * @public */ - parse(input: string[], state: any = {}): Result { + parse(input: string[], state: Record = {}): Result { const parser = seq([this, eof], 0); return parser.exec(input, state, 0); } @@ -89,7 +89,7 @@ export class Parser { * * @public */ - find(input: string[], state: any = {}): { index: number, input: string[], result: Result } | undefined { + find(input: string[], state: Record = {}): { index: number, input: string[], result: Result } | undefined { for (let i = 0; i < input.length; i++) { const innerState = Object.assign({}, state); const result = this.exec(input, innerState, i); @@ -105,7 +105,7 @@ export class Parser { * * @public */ - findAll(input: string[], state: any = {}): { index: number, input: string[], result: Result }[] { + findAll(input: string[], state: Record = {}): { index: number, input: string[], result: Result }[] { const results = []; for (let i = 0; i < input.length; i++) { const innerState = Object.assign({}, state); @@ -177,7 +177,7 @@ export class Parser { * * @public */ - state(key: string, value: (state: any) => any): Parser { + state(key: string, value: (state: Record) => any): Parser { return createParser((input, index, state) => { const storedValue = state[key]; state[key] = value(state); @@ -228,7 +228,7 @@ export type LazyParserOpts = { * * @public */ -export type ParserHandler = (input: string[], index: number, state: any) => Result; +export type ParserHandler = (input: string[], index: number, state: Record) => Result; /** * @internal @@ -313,19 +313,19 @@ function many(parser: Parser, opts: { min?: number, max?: number, notMatch * * @public */ -export function seq[]>(parsers: [...U]): Parser> +export function seq[]>(parsers: [...U]): Parser> /** * Create a new parser that sequentially applies an array of parser. * * @public * @param select - The index of the data returned in the result. */ -export function seq[], V extends number>(parsers: [...U], select: V): U[V] -export function seq(parsers: Parser[], select?: number) { +export function seq[], V extends number>(parsers: [...U], select: V): U[V] +export function seq(parsers: Parser[], select?: number) { return (select == null) ? seqAll(parsers) : seqSelect(parsers, select); } -function seqAll[]>(parsers: [...U]): Parser> { +function seqAll[]>(parsers: [...U]): Parser> { return createParser((input, index, state) => { let result; let latestIndex = index; @@ -342,7 +342,7 @@ function seqAll[]>(parsers: [...U]): Parser[], V extends number>(parsers: [...U], select: V): U[V] { +function seqSelect[], V extends number>(parsers: [...U], select: V): U[V] { return seqAll(parsers).map(values => values[select]); } @@ -427,7 +427,7 @@ export function notMatch(parser: Parser): Parser { * * @public */ -export function where(condition: (state: any) => boolean, parser: Parser): Parser { +export function where(condition: (state: Record) => boolean, parser: Parser): Parser { return createParser((input, index, state) => { return condition(state) ? parser.exec(input, state, index) @@ -463,7 +463,7 @@ export const eof = createParser((input, index, _state) => { * @public */ export function language>(source: LanguageSource): U { - const lang: Record> = {}; + const lang: Record> = {}; for (const key of Object.keys(source)) { lang[key] = lazy(() => { const parser = (source as any)[key](lang);