Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | 19x 95x 90x 90x 13067x 756x | // @flow import P from 'parsimmon' import crap from '../crap' import type { NodeType, ParserType } from '../../types' const BinaryOperatorParser = ( OperandParser: ParserType, OperatorParser: ParserType, description: string ): ParserType => P.lazy((): mixed => { const OperatorParser_ = OperatorParser.node('primitive') return P.seq( OperandParser, P.seq(crap.then(OperatorParser_), crap.then(OperandParser)).many() ) .map( (value: [NodeType, Array<NodeType>]): NodeType => value[1].length > 0 ? { name: 'binaryOperation', value: value[1].reduce( (a: Array<NodeType>, b: NodeType): Array<NodeType> => a.concat(b), [value[0]] ) } : value[0] ) .desc(description) }) export default BinaryOperatorParser |