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 37 38 | 18x 17x 17x 17x 2863x 168x | // @flow import P from 'parsimmon' import crap from '../crap' import type { NodeType, ParserType, UnaryOperationNodeType, PrimitiveNodeType } from '../../types' const UnaryOperatorParser = P.lazy((): ParserType => { const OperatorParser = P.oneOf('+-!') .trim(crap) .node('primitive') const ProjectionParser = require('../projection').default return P.seq(OperatorParser.many(), ProjectionParser) .map( ([operators, operand]: [Array<PrimitiveNodeType>, NodeType]): NodeType => operators.length > 0 ? operators.reduce( (a: NodeType, b: PrimitiveNodeType): UnaryOperationNodeType => ({ name: 'unaryOperation', value: { operator: b, operand: a } }), operand ) : operand ) .desc('unaryOperator') }) export default UnaryOperatorParser |