import { Token } from '../Lexer' ; import { betterError , ParseError , Parser , ParseResult , ParserOutput , resultOrError } from './ParserInterface' ; export function seq < TKind , T1 , T2 > ( p1 , p2 ) ; export function seq < TKind , T1 , T2 , T3 > ( p1 , p2 , p3 ) ; export function seq < TKind , T1 , T2 , T3 , T4 > ( p1 , p2 , p3 , p4 ) ; export function seq < TKind , T1 , T2 , T3 , T4 , T5 > ( p1 , p2 , p3 , p4 , p5 ) ; export function seq < TKind , T1 , T2 , T3 , T4 , T5 , T6 > ( p1 , p2 , p3 , p4 , p5 , p6 ) ; export function seq < TKind , T1 , T2 , T3 , T4 , T5 , T6 , T7 > ( p1 , p2 , p3 , p4 , p5 , p6 , p7 ) ; export function seq < TKind , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 > ( p1 , p2 , p3 , p4 , p5 , p6 , p7 , p8 ) ; export function seq < TKind , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 > ( p1 , p2 , p3 , p4 , p5 , p6 , p7 , p8 , p9 ) ; export function seq < TKind , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 > ( p1 , p2 , p3 , p4 , p5 , p6 , p7 , p8 , p9 , p10 ) ; export function seq < TKind , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 > ( p1 , p2 , p3 , p4 , p5 , p6 , p7 , p8 , p9 , p10 , p11 ) ; export function seq < TKind , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 > ( p1 , p2 , p3 , p4 , p5 , p6 , p7 , p8 , p9 , p10 , p11 , p12 ) ; export function seq < TKind , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 > ( p1 , p2 , p3 , p4 , p5 , p6 , p7 , p8 , p9 , p10 , p11 , p12 , p13 ) ; export function seq < TKind , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 > ( p1 , p2 , p3 , p4 , p5 , p6 , p7 , p8 , p9 , p10 , p11 , p12 , p13 , p14 ) ; export function seq < TKind , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 > ( p1 , p2 , p3 , p4 , p5 , p6 , p7 , p8 , p9 , p10 , p11 , p12 , p13 , p14 , p15 ) ; export function seq < TKind , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 > ( p1 , p2 , p3 , p4 , p5 , p6 , p7 , p8 , p9 , p10 , p11 , p12 , p13 , p14 , p15 , p16 ) ; export function seq ( ... ps ) { return { parse ( token ) { let error ; let result = [ { firstToken : token , nextToken : token , result : [ ] } ] ; for ( const p of ps ) { if ( result . length === 0 ) { break ; } const steps = result ; result = [ ] ; for ( const step of steps ) { const output = p . parse ( step . nextToken ) ; error = betterError ( error , output . error ) ; if ( output . successful ) { for ( const candidate of output . candidates ) { result . push ( { firstToken : step . firstToken , nextToken : candidate . nextToken , result : step . result . concat ( [ candidate . result ] ) } ) ; } } } } return resultOrError ( result , error , result . length !== 0 ) ; } } ; }