Socket
Socket
Sign inDemoInstall

parsimmon

Package Overview
Dependencies
1
Maintainers
2
Versions
49
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.5.0 to 0.5.1

27

build/parsimmon.browser.js

@@ -173,2 +173,9 @@ var Parsimmon = (function(undefined) {

/**
* Allows to add custom primitive parsers
*/
var custom = Parsimmon.custom = function(parsingFunction) {
return Parser(parsingFunction(makeSuccess, makeFailure));
};
var alt = Parsimmon.alt = function() {

@@ -396,2 +403,22 @@ var parsers = [].slice.call(arguments);

var test = Parsimmon.test = function(predicate) {
return Parser(function(stream, i) {
var char = stream.charAt(i);
if (i < stream.length && predicate(char)) {
return makeSuccess(i+1, char);
}
else {
return makeFailure(i, 'a character matching '+predicate);
}
});
};
var takeWhile = Parsimmon.takeWhile = function(predicate) {
return Parser(function(stream, i) {
var j = i;
while (j < stream.length && predicate(stream.charAt(j))) j += 1;
return makeSuccess(j, stream.slice(i, j));
});
};
var lazy = Parsimmon.lazy = function(desc, f) {

@@ -398,0 +425,0 @@ if (arguments.length < 2) {

2

build/parsimmon.browser.min.js

@@ -1,1 +0,1 @@

var Parsimmon=function(t){var r=function(t,r,n){return function e(u,i){if(i===n){i=u;u=Object}function a(){var t=this instanceof a?this:new s;t.init.apply(t,arguments);return t}function s(){}a.Bare=s;var f=s[t]=u[t];var c=s[t]=a[t]=a.p=new s;var o;c.constructor=a;a.extend=function(t){return e(a,t)};return(a.open=function(t){if(typeof t==="function"){t=t.call(a,c,f,a,u)}if(typeof t==="object"){for(o in t){if(r.call(t,o)){c[o]=t[o]}}}if(!("init"in c))c.init=u;return a})(i)}}("prototype",{}.hasOwnProperty);var n={};n.Parser=r(function(r,e,u){"use strict";function i(t,r){return{status:true,index:t,value:r,furthest:-1,expected:""}}function a(t,r){return{status:false,index:-1,value:null,furthest:t,expected:r}}function s(t,r){if(!r)return t;if(t.furthest>=r.furthest)return t;return{status:t.status,index:t.index,value:t.value,furthest:r.furthest,expected:r.expected}}function f(t){if(!(t instanceof u))throw new Error("not a parser: "+t)}var c=n.formatError=function(t,r){var n=r.expected;var e=r.index;if(e===t.length){return"expected "+n+", got the end of the string"}var u=e>0?"'...":"'";var i=t.length-e>12?"...'":"'";return"expected "+n+" at character "+e+", got "+u+t.slice(e,e+12)+i};r.init=function(t){this._=t};r.parse=function(t){var r=this.skip(z)._(t,0);return r.status?{status:true,value:r.value}:{status:false,index:r.furthest,expected:r.expected}};var o=n.seq=function(){var t=[].slice.call(arguments);var r=t.length;return u(function(n,e){var u;var a=new Array(r);for(var f=0;f<r;f+=1){u=s(t[f]._(n,e),u);if(!u.status)return u;a[f]=u.value;e=u.index}return s(i(e,a),u)})};var v=n.alt=function(){var t=[].slice.call(arguments);var r=t.length;if(r===0)return d("zero alternates");return u(function(r,n){var e;for(var u=0;u<t.length;u+=1){e=s(t[u]._(r,n),e);if(e.status)return e}return e})};r.or=function(t){return v(this,t)};r.then=function(t){if(typeof t==="function"){throw new Error("chaining features of .then are no longer supported")}f(t);return o(this,t).map(function(t){return t[1]})};r.many=function(){var t=this;return u(function(r,n){var e=[];var u;var a;for(;;){u=s(t._(r,n),u);if(u.status){n=u.index;e.push(u.value)}else{return s(i(n,e),u)}}})};r.times=function(t,r){if(arguments.length<2)r=t;var n=this;return u(function(e,u){var a=[];var f=u;var c;var o;for(var v=0;v<t;v+=1){c=n._(e,u);o=s(c,o);if(c.status){u=c.index;a.push(c.value)}else{return o}}for(;v<r;v+=1){c=n._(e,u);o=s(c,o);if(c.status){u=c.index;a.push(c.value)}else{break}}return s(i(u,a),o)})};r.result=function(t){return this.then(p(t))};r.atMost=function(t){return this.times(0,t)};r.atLeast=function(t){var r=this;return o(this.times(t),this.many()).map(function(t){return t[0].concat(t[1])})};r.map=function(t){var r=this;return u(function(n,e){var u=r._(n,e);if(!u.status)return u;return s(i(u.index,t(u.value)),u)})};r.skip=function(t){return o(this,t).map(function(t){return t[0]})};r.mark=function(){return o(b,this,b).map(function(t){return{start:t[0],value:t[1],end:t[2]}})};r.desc=function(t){return this.or(d(t))};var l=n.string=function(t){var r=t.length;var n="'"+t+"'";return u(function(e,u){var s=e.slice(u,u+r);if(s===t){return i(u+r,s)}else{return a(u,n)}})};var h=n.regex=function(t){var r=RegExp("^(?:"+t.source+")",(""+t).slice((""+t).lastIndexOf("/")+1));return u(function(n,e){var u=r.exec(n.slice(e));if(u){var s=u[0];return i(e+s.length,s)}else{return a(e,t)}})};var p=n.succeed=function(t){return u(function(r,n){return i(n,t)})};var d=n.fail=function(t){return u(function(r,n){return a(n,t)})};var g=n.letter=h(/[a-z]/i).desc("a letter");var x=n.letters=h(/[a-z]*/i);var m=n.digit=h(/[0-9]/).desc("a digit");var y=n.digits=h(/[0-9]*/);var _=n.whitespace=h(/\s+/).desc("whitespace");var w=n.optWhitespace=h(/\s*/);var E=n.any=u(function(t,r){if(r>=t.length)return a(r,"any character");return i(r+1,t.charAt(r))});var k=n.all=u(function(t,r){return i(t.length,t.slice(r))});var z=n.eof=u(function(t,r){if(r<t.length)return a(r,"EOF");return i(r,null)});var O=n.lazy=function(r,n){if(arguments.length<2){n=r;r=t}var e=u(function(t,r){e._=n()._;return e._(t,r)});if(r)e=e.desc(r);return e};var b=n.index=u(function(t,r){return i(r,r)});r.concat=r.or;r.empty=d("empty");r.of=u.of=n.of=p;r.ap=function(t){return o(this,t).map(function(t){return t[0](t[1])})};r.chain=function(t){var r=this;return u(function(n,e){var u=r._(n,e);if(!u.status)return u;var i=t(u.value);return s(i._(n,u.index),u)})}});return n}();
var Parsimmon=function(t){var r=function(t,r,n){return function e(u,a){if(a===n){a=u;u=Object}function i(){var t=this instanceof i?this:new s;t.init.apply(t,arguments);return t}function s(){}i.Bare=s;var c=s[t]=u[t];var f=s[t]=i[t]=i.p=new s;var o;f.constructor=i;i.extend=function(t){return e(i,t)};return(i.open=function(t){if(typeof t==="function"){t=t.call(i,f,c,i,u)}if(typeof t==="object"){for(o in t){if(r.call(t,o)){f[o]=t[o]}}}if(!("init"in f))f.init=u;return i})(a)}}("prototype",{}.hasOwnProperty);var n={};n.Parser=r(function(r,e,u){"use strict";function a(t,r){return{status:true,index:t,value:r,furthest:-1,expected:""}}function i(t,r){return{status:false,index:-1,value:null,furthest:t,expected:r}}function s(t,r){if(!r)return t;if(t.furthest>=r.furthest)return t;return{status:t.status,index:t.index,value:t.value,furthest:r.furthest,expected:r.expected}}function c(t){if(!(t instanceof u))throw new Error("not a parser: "+t)}var f=n.formatError=function(t,r){var n=r.expected;var e=r.index;if(e===t.length){return"expected "+n+", got the end of the string"}var u=e>0?"'...":"'";var a=t.length-e>12?"...'":"'";return"expected "+n+" at character "+e+", got "+u+t.slice(e,e+12)+a};r.init=function(t){this._=t};r.parse=function(t){var r=this.skip(A)._(t,0);return r.status?{status:true,value:r.value}:{status:false,index:r.furthest,expected:r.expected}};var o=n.seq=function(){var t=[].slice.call(arguments);var r=t.length;return u(function(n,e){var u;var i=new Array(r);for(var c=0;c<r;c+=1){u=s(t[c]._(n,e),u);if(!u.status)return u;i[c]=u.value;e=u.index}return s(a(e,i),u)})};var v=n.custom=function(t){return u(t(a,i))};var l=n.alt=function(){var t=[].slice.call(arguments);var r=t.length;if(r===0)return g("zero alternates");return u(function(r,n){var e;for(var u=0;u<t.length;u+=1){e=s(t[u]._(r,n),e);if(e.status)return e}return e})};r.or=function(t){return l(this,t)};r.then=function(t){if(typeof t==="function"){throw new Error("chaining features of .then are no longer supported")}c(t);return o(this,t).map(function(t){return t[1]})};r.many=function(){var t=this;return u(function(r,n){var e=[];var u;var i;for(;;){u=s(t._(r,n),u);if(u.status){n=u.index;e.push(u.value)}else{return s(a(n,e),u)}}})};r.times=function(t,r){if(arguments.length<2)r=t;var n=this;return u(function(e,u){var i=[];var c=u;var f;var o;for(var v=0;v<t;v+=1){f=n._(e,u);o=s(f,o);if(f.status){u=f.index;i.push(f.value)}else{return o}}for(;v<r;v+=1){f=n._(e,u);o=s(f,o);if(f.status){u=f.index;i.push(f.value)}else{break}}return s(a(u,i),o)})};r.result=function(t){return this.then(d(t))};r.atMost=function(t){return this.times(0,t)};r.atLeast=function(t){var r=this;return o(this.times(t),this.many()).map(function(t){return t[0].concat(t[1])})};r.map=function(t){var r=this;return u(function(n,e){var u=r._(n,e);if(!u.status)return u;return s(a(u.index,t(u.value)),u)})};r.skip=function(t){return o(this,t).map(function(t){return t[0]})};r.mark=function(){return o(j,this,j).map(function(t){return{start:t[0],value:t[1],end:t[2]}})};r.desc=function(t){return this.or(g(t))};var h=n.string=function(t){var r=t.length;var n="'"+t+"'";return u(function(e,u){var s=e.slice(u,u+r);if(s===t){return a(u+r,s)}else{return i(u,n)}})};var p=n.regex=function(t){var r=RegExp("^(?:"+t.source+")",(""+t).slice((""+t).lastIndexOf("/")+1));return u(function(n,e){var u=r.exec(n.slice(e));if(u){var s=u[0];return a(e+s.length,s)}else{return i(e,t)}})};var d=n.succeed=function(t){return u(function(r,n){return a(n,t)})};var g=n.fail=function(t){return u(function(r,n){return i(n,t)})};var x=n.letter=p(/[a-z]/i).desc("a letter");var m=n.letters=p(/[a-z]*/i);var y=n.digit=p(/[0-9]/).desc("a digit");var _=n.digits=p(/[0-9]*/);var w=n.whitespace=p(/\s+/).desc("whitespace");var k=n.optWhitespace=p(/\s*/);var E=n.any=u(function(t,r){if(r>=t.length)return i(r,"any character");return a(r+1,t.charAt(r))});var z=n.all=u(function(t,r){return a(t.length,t.slice(r))});var A=n.eof=u(function(t,r){if(r<t.length)return i(r,"EOF");return a(r,null)});var O=n.test=function(t){return u(function(r,n){var e=r.charAt(n);if(n<r.length&&t(e)){return a(n+1,e)}else{return i(n,"a character matching "+t)}})};var b=n.takeWhile=function(t){return u(function(r,n){var e=n;while(e<r.length&&t(r.charAt(e)))e+=1;return a(e,r.slice(n,e))})};var P=n.lazy=function(r,n){if(arguments.length<2){n=r;r=t}var e=u(function(t,r){e._=n()._;return e._(t,r)});if(r)e=e.desc(r);return e};var j=n.index=u(function(t,r){return a(r,r)});r.concat=r.or;r.empty=g("empty");r.of=u.of=n.of=d;r.ap=function(t){return o(this,t).map(function(t){return t[0](t[1])})};r.chain=function(t){var r=this;return u(function(n,e){var u=r._(n,e);if(!u.status)return u;var a=t(u.value);return s(a._(n,u.index),u)})}});return n}();

@@ -101,2 +101,9 @@ var P = require('pjs').P;

/**
* Allows to add custom primitive parsers
*/
var custom = Parsimmon.custom = function(parsingFunction) {
return Parser(parsingFunction(makeSuccess, makeFailure));
};
var alt = Parsimmon.alt = function() {

@@ -324,2 +331,22 @@ var parsers = [].slice.call(arguments);

var test = Parsimmon.test = function(predicate) {
return Parser(function(stream, i) {
var char = stream.charAt(i);
if (i < stream.length && predicate(char)) {
return makeSuccess(i+1, char);
}
else {
return makeFailure(i, 'a character matching '+predicate);
}
});
};
var takeWhile = Parsimmon.takeWhile = function(predicate) {
return Parser(function(stream, i) {
var j = i;
while (j < stream.length && predicate(stream.charAt(j))) j += 1;
return makeSuccess(j, stream.slice(i, j));
});
};
var lazy = Parsimmon.lazy = function(desc, f) {

@@ -326,0 +353,0 @@ if (arguments.length < 2) {

{
"name": "parsimmon",
"version": "0.5.0",
"version": "0.5.1",
"description": "A monadic LL(infinity) parser combinator library",
"keywords": ["parsing", "parse", "parser combinators"],
"author": "Jay Adkisson <jjmadkisson at gmail dot com>",
"repository": "git://github.com/jayferd/parsimmon",
"author": "Jeanine Adkisson <jneen at jneen dot net>",
"repository": "git://github.com/jneen/parsimmon",

@@ -9,0 +9,0 @@ "files": [

@@ -79,3 +79,3 @@ [![Build Status](https://secure.travis-ci.org/jneen/parsimmon.png)](http://travis-ci.org/jneen/parsimmon)

the string, and yields `result`.
- `Parsimmon.seq(p1, p2, ... pn)` accepts a variable number of parsers
- `Parsimmon.seq(p1, p2, ... pn)` accepts a variable number of parsers
that it expects to find in order, yielding an array of the results.

@@ -100,3 +100,32 @@ - `Parsimmon.alt(p1, p2, ... pn)` accepts a variable number of parsers,

- `Parsimmon.index` is a parser that yields the current index of the parse.
- `Parsimmon.test(pred)` yield a single characer if it passes the predicate.
- `Parsimmon.takeWhile(pred)` yield a string containing all the next characters that pass the predicate.
### Adding base parsers
You can add a primitive parser (similar to the included ones) by using
`Parsimmon.custom`. This is an example of how to create a parser that matches
any character except the one provided:
```js
function notChar(char) {
return Parsimmon.custom(function(success, failure) {
return function(stream, i) {
if (stream.charAt(i) !== char && stream.length <= i) {
return success(i+1, stream.charAt(i));
}
return failure(i, 'anything different than "' + char + '"');
}
});
}
```
This parser can then be used and composed the same way all the existing ones are
used and composed, for example:
```js
var parser = seq(string('a'), notChar('b').times(5));
parser.parse('accccc');
```
### Parser methods

@@ -103,0 +132,0 @@ - `parser.or(otherParser)`:

@@ -100,2 +100,9 @@ var Parsimmon = {};

/**
* Allows to add custom primitive parsers
*/
var custom = Parsimmon.custom = function(parsingFunction) {
return Parser(parsingFunction(makeSuccess, makeFailure));
};
var alt = Parsimmon.alt = function() {

@@ -323,2 +330,22 @@ var parsers = [].slice.call(arguments);

var test = Parsimmon.test = function(predicate) {
return Parser(function(stream, i) {
var char = stream.charAt(i);
if (i < stream.length && predicate(char)) {
return makeSuccess(i+1, char);
}
else {
return makeFailure(i, 'a character matching '+predicate);
}
});
};
var takeWhile = Parsimmon.takeWhile = function(predicate) {
return Parser(function(stream, i) {
var j = i;
while (j < stream.length && predicate(stream.charAt(j))) j += 1;
return makeSuccess(j, stream.slice(i, j));
});
};
var lazy = Parsimmon.lazy = function(desc, f) {

@@ -325,0 +352,0 @@ if (arguments.length < 2) {

@@ -66,2 +66,55 @@ suite('parser', function() {

suite('Parsimmon.custom', function(){
test('simple parser definition', function(){
function customAny() {
return Parsimmon.custom(function(success, failure){
return function(stream, i) {
return success(i+1, stream.charAt(i));
}
});
}
var letters = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];
var parser = customAny();
for (var i = 0; i < letters.length; i++) {
assert.deepEqual(parser.parse(letters[i]), {status: true, value: letters[i]})
}
});
test('failing parser', function(){
function failer() {
return Parsimmon.custom(function(success, failure){
return function(stream, i) {
return failure(i, 'nothing');
}
});
}
assert.deepEqual(failer().parse('a'), {status: false, index: 0, expected: 'nothing'})
});
test('composes with existing parsers', function(){
function notChar(char) {
return Parsimmon.custom(function(success, failure) {
return function(stream, i) {
if (stream.charCodeAt(i) !== char.charCodeAt(0)) {
return success(i+1, stream.charAt(i));
}
return failure(i, 'something different than "' + stream.charAt(i)) + '"';
}
});
}
function join(array) {
return array.join('');
}
var parser = seq(string('a'), notChar('b').times(5).map(join), notChar('b').or(string('b'))).map(join);
assert.deepEqual(parser.parse('acccccb'), {status: true, value: 'acccccb'});
});
});
test('Parsimmon.alt', function(){

@@ -310,2 +363,17 @@ var toNode = function(nodeType){

test('test', function() {
var parser = Parsimmon.test(function(ch) { return ch !== '.' });
assert.equal(parser.parse('x').value, 'x');
assert.equal(parser.parse('.').status, false);
});
test('takeWhile', function() {
var parser = Parsimmon.takeWhile(function(ch) { return ch !== '.' })
.skip(all);
assert.equal(parser.parse('abc').value, 'abc');
assert.equal(parser.parse('abc.').value, 'abc');
assert.equal(parser.parse('.').value, '');
assert.equal(parser.parse('').value, '');
});
test('index', function() {

@@ -312,0 +380,0 @@ var parser = regex(/^x*/).then(index);

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc