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 | 19x 18x 18x 18x 3260x 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
|