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 13277x 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
|