UNPKG

parser-combinator

Version:
81 lines (67 loc) 2.1 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _charsBundle = require('./chars-bundle'); var _charsBundle2 = _interopRequireDefault(_charsBundle); var _flowBundle = require('./flow-bundle'); var _flowBundle2 = _interopRequireDefault(_flowBundle); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } // unit -> Parser number char /* * Parsec * https://github.com/d-plaindoux/parsec * * Copyright (c) 2016 Didier Plaindoux * Licensed under the LGPL2 license. */ function numberLiteral() { // [-+]?\d+([.]\d+)?([eE][+-]?\d+)? var join = function join(r) { return r.join(''); }, joinOrEmpty = function joinOrEmpty(r) { return r.map(join).orElse(''); }, digits = digit().rep().map(join), integer = _charsBundle2.default.charIn('+-').opt().then(digits).map(function (r) { return r[0].orElse('') + r[1]; }), float = integer.then(_charsBundle2.default.char('.').then(digits).opt().map(joinOrEmpty)).then(_charsBundle2.default.charIn('eE').then(integer).opt().map(joinOrEmpty)).map(function (r) { return r[0] + r[1] + r[2]; }); return float.map(function (r) { return parseFloat(r, 10); }); } // unit -> Parser char char function digit() { return _flowBundle2.default.satisfy(function (v) { return '0' <= v && v <= '9'; }); } function digits() { return digit().rep().map(function (v) { return v.join(''); }); } function integer() { // [-+]?\d+([.]\d+)?([eE][+-]?\d+)? var join = function join(r) { return r.join(''); }, digits = digit().rep().map(join), integer = _charsBundle2.default.charIn('+-').opt().then(digits).map(function (r) { return r[0].orElse('') + r[1]; }); return integer.map(function (i) { return parseInt(i, 10); }); } exports.default = { numberLiteral: numberLiteral(), digit: digit(), digits: digits(), integer: integer() }; //# sourceMappingURL=numbers-bundle.js.map