Comparing version 1.1.0 to 1.2.0
1311
compile.js
@@ -5,18 +5,2 @@ 'use strict'; | ||
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } | ||
var _Array$from = _interopDefault(require('babel-runtime/core-js/array/from')); | ||
var _getIterator = _interopDefault(require('babel-runtime/core-js/get-iterator')); | ||
var _get = _interopDefault(require('babel-runtime/helpers/get')); | ||
var _Object$getPrototypeOf = _interopDefault(require('babel-runtime/core-js/object/get-prototype-of')); | ||
var _possibleConstructorReturn = _interopDefault(require('babel-runtime/helpers/possibleConstructorReturn')); | ||
var _inherits = _interopDefault(require('babel-runtime/helpers/inherits')); | ||
var _Set = _interopDefault(require('babel-runtime/core-js/set')); | ||
var _classCallCheck = _interopDefault(require('babel-runtime/helpers/classCallCheck')); | ||
var _createClass = _interopDefault(require('babel-runtime/helpers/createClass')); | ||
var _slicedToArray = _interopDefault(require('babel-runtime/helpers/slicedToArray')); | ||
var _defineProperty = _interopDefault(require('babel-runtime/helpers/defineProperty')); | ||
var _regeneratorRuntime = _interopDefault(require('babel-runtime/regenerator')); | ||
var _Symbol$iterator = _interopDefault(require('babel-runtime/core-js/symbol/iterator')); | ||
/** | ||
@@ -26,70 +10,27 @@ * Returns a new set representing the union of a and b. | ||
function union(a, b) { | ||
var s = new _Set(a); | ||
var s = new Set(a); | ||
addAll(s, b); | ||
return s; | ||
} | ||
/** | ||
* Adds all items from the set b to a. | ||
*/ | ||
function addAll(a, b) { | ||
var _iteratorNormalCompletion = true; | ||
var _didIteratorError = false; | ||
var _iteratorError = undefined; | ||
try { | ||
for (var _iterator = _getIterator(b), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { | ||
var x = _step.value; | ||
a.add(x); | ||
} | ||
} catch (err) { | ||
_didIteratorError = true; | ||
_iteratorError = err; | ||
} finally { | ||
try { | ||
if (!_iteratorNormalCompletion && _iterator.return) { | ||
_iterator.return(); | ||
} | ||
} finally { | ||
if (_didIteratorError) { | ||
throw _iteratorError; | ||
} | ||
} | ||
for (var x of b) { | ||
a.add(x); | ||
} | ||
} | ||
/** | ||
* Returns whether two sets are equal | ||
*/ | ||
function equal(a, b) { | ||
if (a === b) return true; | ||
if (a.size !== b.size) return false; | ||
var _iteratorNormalCompletion2 = true; | ||
var _didIteratorError2 = false; | ||
var _iteratorError2 = undefined; | ||
try { | ||
for (var _iterator2 = _getIterator(a), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { | ||
var x = _step2.value; | ||
if (!b.has(x)) { | ||
return false; | ||
} | ||
for (var x of a) { | ||
if (!b.has(x)) { | ||
return false; | ||
} | ||
} catch (err) { | ||
_didIteratorError2 = true; | ||
_iteratorError2 = err; | ||
} finally { | ||
try { | ||
if (!_iteratorNormalCompletion2 && _iterator2.return) { | ||
_iterator2.return(); | ||
} | ||
} finally { | ||
if (_didIteratorError2) { | ||
throw _iteratorError2; | ||
} | ||
} | ||
} | ||
@@ -103,66 +44,45 @@ | ||
*/ | ||
var Node = function () { | ||
function Node() { | ||
_classCallCheck(this, Node); | ||
Object.defineProperty(this, 'followpos', { value: new _Set() }); | ||
class Node { | ||
constructor() { | ||
Object.defineProperty(this, 'followpos', { | ||
value: new Set() | ||
}); | ||
} | ||
_createClass(Node, [{ | ||
key: 'calcFollowpos', | ||
value: function calcFollowpos() { | ||
for (var key in this) { | ||
if (this[key] instanceof Node) { | ||
this[key].calcFollowpos(); | ||
} | ||
calcFollowpos() { | ||
for (var key in this) { | ||
if (this[key] instanceof Node) { | ||
this[key].calcFollowpos(); | ||
} | ||
} | ||
}]); | ||
} | ||
return Node; | ||
}(); | ||
} | ||
/** | ||
* Represents a variable reference | ||
*/ | ||
var Variable = function (_Node) { | ||
_inherits(Variable, _Node); | ||
function Variable(name) { | ||
_classCallCheck(this, Variable); | ||
class Variable extends Node { | ||
constructor(name) { | ||
super(); | ||
this.name = name; | ||
} | ||
var _this = _possibleConstructorReturn(this, (Variable.__proto__ || _Object$getPrototypeOf(Variable)).call(this)); | ||
_this.name = name; | ||
return _this; | ||
copy() { | ||
return new Variable(this.name); | ||
} | ||
_createClass(Variable, [{ | ||
key: 'copy', | ||
value: function copy() { | ||
return new Variable(this.name); | ||
} | ||
}]); | ||
return Variable; | ||
}(Node); | ||
} | ||
/** | ||
* Represents a comment | ||
*/ | ||
var Comment = function (_Node2) { | ||
_inherits(Comment, _Node2); | ||
function Comment(value) { | ||
_classCallCheck(this, Comment); | ||
var _this2 = _possibleConstructorReturn(this, (Comment.__proto__ || _Object$getPrototypeOf(Comment)).call(this)); | ||
_this2.value = value; | ||
return _this2; | ||
class Comment extends Node { | ||
constructor(value) { | ||
super(); | ||
this.value = value; | ||
} | ||
return Comment; | ||
}(Node); | ||
} | ||
/** | ||
@@ -172,18 +92,11 @@ * Represents an assignment statement. | ||
*/ | ||
var Assignment = function (_Node3) { | ||
_inherits(Assignment, _Node3); | ||
function Assignment(variable, expression) { | ||
_classCallCheck(this, Assignment); | ||
var _this3 = _possibleConstructorReturn(this, (Assignment.__proto__ || _Object$getPrototypeOf(Assignment)).call(this)); | ||
_this3.variable = variable; | ||
_this3.expression = expression; | ||
return _this3; | ||
class Assignment extends Node { | ||
constructor(variable, expression) { | ||
super(); | ||
this.variable = variable; | ||
this.expression = expression; | ||
} | ||
return Assignment; | ||
}(Node); | ||
} | ||
/** | ||
@@ -193,40 +106,27 @@ * Represents an alternation. | ||
*/ | ||
var Alternation = function (_Node4) { | ||
_inherits(Alternation, _Node4); | ||
function Alternation(a, b) { | ||
_classCallCheck(this, Alternation); | ||
class Alternation extends Node { | ||
constructor(a, b) { | ||
super(); | ||
this.a = a; | ||
this.b = b; | ||
} | ||
var _this4 = _possibleConstructorReturn(this, (Alternation.__proto__ || _Object$getPrototypeOf(Alternation)).call(this)); | ||
get nullable() { | ||
return this.a.nullable || this.b.nullable; | ||
} | ||
_this4.a = a; | ||
_this4.b = b; | ||
return _this4; | ||
get firstpos() { | ||
return union(this.a.firstpos, this.b.firstpos); | ||
} | ||
_createClass(Alternation, [{ | ||
key: 'copy', | ||
value: function copy() { | ||
return new Alternation(this.a.copy(), this.b.copy()); | ||
} | ||
}, { | ||
key: 'nullable', | ||
get: function get() { | ||
return this.a.nullable || this.b.nullable; | ||
} | ||
}, { | ||
key: 'firstpos', | ||
get: function get() { | ||
return union(this.a.firstpos, this.b.firstpos); | ||
} | ||
}, { | ||
key: 'lastpos', | ||
get: function get() { | ||
return union(this.a.lastpos, this.b.lastpos); | ||
} | ||
}]); | ||
get lastpos() { | ||
return union(this.a.lastpos, this.b.lastpos); | ||
} | ||
return Alternation; | ||
}(Node); | ||
copy() { | ||
return new Alternation(this.a.copy(), this.b.copy()); | ||
} | ||
} | ||
/** | ||
@@ -236,79 +136,47 @@ * Represents a concatenation, or chain. | ||
*/ | ||
var Concatenation = function (_Node5) { | ||
_inherits(Concatenation, _Node5); | ||
function Concatenation(a, b) { | ||
_classCallCheck(this, Concatenation); | ||
class Concatenation extends Node { | ||
constructor(a, b) { | ||
super(); | ||
this.a = a; | ||
this.b = b; | ||
} | ||
var _this5 = _possibleConstructorReturn(this, (Concatenation.__proto__ || _Object$getPrototypeOf(Concatenation)).call(this)); | ||
_this5.a = a; | ||
_this5.b = b; | ||
return _this5; | ||
get nullable() { | ||
return this.a.nullable && this.b.nullable; | ||
} | ||
_createClass(Concatenation, [{ | ||
key: 'calcFollowpos', | ||
value: function calcFollowpos() { | ||
_get(Concatenation.prototype.__proto__ || _Object$getPrototypeOf(Concatenation.prototype), 'calcFollowpos', this).call(this); | ||
var _iteratorNormalCompletion = true; | ||
var _didIteratorError = false; | ||
var _iteratorError = undefined; | ||
get firstpos() { | ||
var s = this.a.firstpos; | ||
try { | ||
for (var _iterator = _getIterator(this.a.lastpos), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { | ||
var n = _step.value; | ||
addAll(n.followpos, this.b.firstpos); | ||
} | ||
} catch (err) { | ||
_didIteratorError = true; | ||
_iteratorError = err; | ||
} finally { | ||
try { | ||
if (!_iteratorNormalCompletion && _iterator.return) { | ||
_iterator.return(); | ||
} | ||
} finally { | ||
if (_didIteratorError) { | ||
throw _iteratorError; | ||
} | ||
} | ||
} | ||
if (this.a.nullable) { | ||
s = union(s, this.b.firstpos); | ||
} | ||
}, { | ||
key: 'copy', | ||
value: function copy() { | ||
return new Concatenation(this.a.copy(), this.b.copy()); | ||
} | ||
}, { | ||
key: 'nullable', | ||
get: function get() { | ||
return this.a.nullable && this.b.nullable; | ||
} | ||
}, { | ||
key: 'firstpos', | ||
get: function get() { | ||
var s = this.a.firstpos; | ||
if (this.a.nullable) { | ||
s = union(s, this.b.firstpos); | ||
} | ||
return s; | ||
return s; | ||
} | ||
get lastpos() { | ||
var s = this.b.lastpos; | ||
if (this.b.nullable) { | ||
s = union(s, this.a.lastpos); | ||
} | ||
}, { | ||
key: 'lastpos', | ||
get: function get() { | ||
var s = this.b.lastpos; | ||
if (this.b.nullable) { | ||
s = union(s, this.a.lastpos); | ||
} | ||
return s; | ||
return s; | ||
} | ||
calcFollowpos() { | ||
super.calcFollowpos(); | ||
for (var n of this.a.lastpos) { | ||
addAll(n.followpos, this.b.firstpos); | ||
} | ||
}]); | ||
} | ||
return Concatenation; | ||
}(Node); | ||
copy() { | ||
return new Concatenation(this.a.copy(), this.b.copy()); | ||
} | ||
} | ||
/** | ||
@@ -318,80 +186,44 @@ * Represents a repetition. | ||
*/ | ||
var Repeat = function (_Node6) { | ||
_inherits(Repeat, _Node6); | ||
function Repeat(expression, op) { | ||
_classCallCheck(this, Repeat); | ||
class Repeat extends Node { | ||
constructor(expression, op) { | ||
super(); | ||
this.expression = expression; | ||
this.op = op; | ||
} | ||
var _this6 = _possibleConstructorReturn(this, (Repeat.__proto__ || _Object$getPrototypeOf(Repeat)).call(this)); | ||
get nullable() { | ||
return this.op === '*' || this.op === '?'; | ||
} | ||
_this6.expression = expression; | ||
_this6.op = op; | ||
return _this6; | ||
get firstpos() { | ||
return this.expression.firstpos; | ||
} | ||
_createClass(Repeat, [{ | ||
key: 'calcFollowpos', | ||
value: function calcFollowpos() { | ||
_get(Repeat.prototype.__proto__ || _Object$getPrototypeOf(Repeat.prototype), 'calcFollowpos', this).call(this); | ||
if (this.op === '*' || this.op === '+') { | ||
var _iteratorNormalCompletion2 = true; | ||
var _didIteratorError2 = false; | ||
var _iteratorError2 = undefined; | ||
get lastpos() { | ||
return this.expression.lastpos; | ||
} | ||
try { | ||
for (var _iterator2 = _getIterator(this.lastpos), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { | ||
var n = _step2.value; | ||
calcFollowpos() { | ||
super.calcFollowpos(); | ||
addAll(n.followpos, this.firstpos); | ||
} | ||
} catch (err) { | ||
_didIteratorError2 = true; | ||
_iteratorError2 = err; | ||
} finally { | ||
try { | ||
if (!_iteratorNormalCompletion2 && _iterator2.return) { | ||
_iterator2.return(); | ||
} | ||
} finally { | ||
if (_didIteratorError2) { | ||
throw _iteratorError2; | ||
} | ||
} | ||
} | ||
if (this.op === '*' || this.op === '+') { | ||
for (var n of this.lastpos) { | ||
addAll(n.followpos, this.firstpos); | ||
} | ||
} | ||
}, { | ||
key: 'copy', | ||
value: function copy() { | ||
return new Repeat(this.expression.copy(), this.op); | ||
} | ||
}, { | ||
key: 'nullable', | ||
get: function get() { | ||
return this.op === '*' || this.op === '?'; | ||
} | ||
}, { | ||
key: 'firstpos', | ||
get: function get() { | ||
return this.expression.firstpos; | ||
} | ||
}, { | ||
key: 'lastpos', | ||
get: function get() { | ||
return this.expression.lastpos; | ||
} | ||
}]); | ||
} | ||
return Repeat; | ||
}(Node); | ||
copy() { | ||
return new Repeat(this.expression.copy(), this.op); | ||
} | ||
function buildRepetition(expression) { | ||
var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; | ||
var max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Infinity; | ||
} | ||
function buildRepetition(expression, min = 0, max = Infinity) { | ||
if (min < 0 || min > max) { | ||
throw new Error('Invalid repetition range: ' + min + ' ' + max); | ||
throw new Error("Invalid repetition range: ".concat(min, " ").concat(max)); | ||
} | ||
var res = null; | ||
for (var i = 0; i < min; i++) { | ||
@@ -419,3 +251,2 @@ res = concat(res, expression.copy()); | ||
} | ||
/** | ||
@@ -425,31 +256,17 @@ * Base class for leaf nodes | ||
var Leaf = function (_Node7) { | ||
_inherits(Leaf, _Node7); | ||
function Leaf() { | ||
_classCallCheck(this, Leaf); | ||
class Leaf extends Node { | ||
get nullable() { | ||
return false; | ||
} | ||
return _possibleConstructorReturn(this, (Leaf.__proto__ || _Object$getPrototypeOf(Leaf)).apply(this, arguments)); | ||
get firstpos() { | ||
return new Set([this]); | ||
} | ||
_createClass(Leaf, [{ | ||
key: 'nullable', | ||
get: function get() { | ||
return false; | ||
} | ||
}, { | ||
key: 'firstpos', | ||
get: function get() { | ||
return new _Set([this]); | ||
} | ||
}, { | ||
key: 'lastpos', | ||
get: function get() { | ||
return new _Set([this]); | ||
} | ||
}]); | ||
get lastpos() { | ||
return new Set([this]); | ||
} | ||
return Leaf; | ||
}(Node); | ||
} | ||
/** | ||
@@ -460,39 +277,18 @@ * Represents a literal value, e.g. a number | ||
var Literal = function (_Leaf) { | ||
_inherits(Literal, _Leaf); | ||
class Literal extends Leaf { | ||
constructor(value) { | ||
super(); | ||
this.value = value; | ||
} | ||
function Literal(value) { | ||
_classCallCheck(this, Literal); | ||
var _this8 = _possibleConstructorReturn(this, (Literal.__proto__ || _Object$getPrototypeOf(Literal)).call(this)); | ||
_this8.value = value; | ||
return _this8; | ||
copy() { | ||
return new Literal(this.value); | ||
} | ||
_createClass(Literal, [{ | ||
key: 'copy', | ||
value: function copy() { | ||
return new Literal(this.value); | ||
} | ||
}]); | ||
return Literal; | ||
}(Leaf); | ||
} | ||
/** | ||
* Marks the end of an expression | ||
*/ | ||
var EndMarker = function (_Leaf2) { | ||
_inherits(EndMarker, _Leaf2); | ||
function EndMarker() { | ||
_classCallCheck(this, EndMarker); | ||
return _possibleConstructorReturn(this, (EndMarker.__proto__ || _Object$getPrototypeOf(EndMarker)).apply(this, arguments)); | ||
} | ||
return EndMarker; | ||
}(Leaf); | ||
class EndMarker extends Leaf {} | ||
/** | ||
@@ -502,45 +298,33 @@ * Represents a tag | ||
*/ | ||
var Tag = function (_Leaf3) { | ||
_inherits(Tag, _Leaf3); | ||
function Tag(name) { | ||
_classCallCheck(this, Tag); | ||
class Tag extends Leaf { | ||
constructor(name) { | ||
super(); | ||
this.name = name; | ||
} | ||
var _this10 = _possibleConstructorReturn(this, (Tag.__proto__ || _Object$getPrototypeOf(Tag)).call(this)); | ||
get nullable() { | ||
return true; | ||
} | ||
_this10.name = name; | ||
return _this10; | ||
copy() { | ||
return new Tag(this.name); | ||
} | ||
_createClass(Tag, [{ | ||
key: 'copy', | ||
value: function copy() { | ||
return new Tag(this.name); | ||
} | ||
}, { | ||
key: 'nullable', | ||
get: function get() { | ||
return true; | ||
} | ||
}]); | ||
} | ||
return Tag; | ||
}(Leaf); | ||
var nodes = Object.freeze({ | ||
Node: Node, | ||
Variable: Variable, | ||
Comment: Comment, | ||
Assignment: Assignment, | ||
Alternation: Alternation, | ||
Concatenation: Concatenation, | ||
Repeat: Repeat, | ||
buildRepetition: buildRepetition, | ||
Literal: Literal, | ||
EndMarker: EndMarker, | ||
Tag: Tag | ||
var nodes = /*#__PURE__*/Object.freeze({ | ||
Node: Node, | ||
Variable: Variable, | ||
Comment: Comment, | ||
Assignment: Assignment, | ||
Alternation: Alternation, | ||
Concatenation: Concatenation, | ||
Repeat: Repeat, | ||
buildRepetition: buildRepetition, | ||
Literal: Literal, | ||
EndMarker: EndMarker, | ||
Tag: Tag | ||
}); | ||
var require$$0 = ( nodes && nodes['default'] ) || nodes; | ||
function peg$subclass(child, parent) { | ||
@@ -550,2 +334,3 @@ function ctor() { | ||
} | ||
ctor.prototype = parent.prototype; | ||
@@ -571,7 +356,6 @@ child.prototype = new ctor(); | ||
var DESCRIBE_EXPECTATION_FNS = { | ||
literal: function literal(expectation) { | ||
literal: function (expectation) { | ||
return "\"" + literalEscape(expectation.text) + "\""; | ||
}, | ||
"class": function _class(expectation) { | ||
"class": function (expectation) { | ||
var escapedParts = "", | ||
@@ -586,12 +370,9 @@ i; | ||
}, | ||
any: function any(expectation) { | ||
any: function (expectation) { | ||
return "any character"; | ||
}, | ||
end: function end(expectation) { | ||
end: function (expectation) { | ||
return "end of input"; | ||
}, | ||
other: function other(expectation) { | ||
other: function (expectation) { | ||
return expectation.description; | ||
@@ -643,2 +424,3 @@ } | ||
} | ||
descriptions.length = j; | ||
@@ -670,5 +452,7 @@ } | ||
var peg$FAILED = {}, | ||
peg$startRuleFunctions = { rules: peg$parserules }, | ||
peg$startRuleFunctions = { | ||
rules: peg$parserules | ||
}, | ||
peg$startRuleFunction = peg$parserules, | ||
peg$c0 = function peg$c0(s) { | ||
peg$c0 = function (s) { | ||
return s; | ||
@@ -682,3 +466,3 @@ }, | ||
peg$c6 = peg$classExpectation(["\r", "\n"], false, false), | ||
peg$c7 = function peg$c7(v) { | ||
peg$c7 = function (v) { | ||
return new n.Comment(v.join('')); | ||
@@ -690,6 +474,6 @@ }, | ||
peg$c11 = peg$literalExpectation(";", false), | ||
peg$c12 = function peg$c12(v, e) { | ||
peg$c12 = function (v, e) { | ||
return new n.Assignment(v, e); | ||
}, | ||
peg$c13 = function peg$c13(v) { | ||
peg$c13 = function (v) { | ||
return new n.Variable(v); | ||
@@ -699,6 +483,6 @@ }, | ||
peg$c15 = peg$literalExpectation("|", false), | ||
peg$c16 = function peg$c16(a, b) { | ||
peg$c16 = function (a, b) { | ||
return new n.Alternation(a, b); | ||
}, | ||
peg$c17 = function peg$c17(a, b) { | ||
peg$c17 = function (a, b) { | ||
return new n.Concatenation(a, b); | ||
@@ -708,3 +492,3 @@ }, | ||
peg$c19 = peg$literalExpectation(":", false), | ||
peg$c20 = function peg$c20(t, e) { | ||
peg$c20 = function (t, e) { | ||
return new n.Concatenation(e, new n.Tag(t)); | ||
@@ -714,3 +498,3 @@ }, | ||
peg$c22 = peg$literalExpectation("*", false), | ||
peg$c23 = function peg$c23(t) { | ||
peg$c23 = function (t) { | ||
return new n.Repeat(t, '*'); | ||
@@ -720,3 +504,3 @@ }, | ||
peg$c25 = peg$literalExpectation("?", false), | ||
peg$c26 = function peg$c26(t) { | ||
peg$c26 = function (t) { | ||
return new n.Repeat(t, '?'); | ||
@@ -726,3 +510,3 @@ }, | ||
peg$c28 = peg$literalExpectation("+", false), | ||
peg$c29 = function peg$c29(t) { | ||
peg$c29 = function (t) { | ||
return new n.Repeat(t, '+'); | ||
@@ -734,3 +518,3 @@ }, | ||
peg$c33 = peg$literalExpectation("}", false), | ||
peg$c34 = function peg$c34(t, m) { | ||
peg$c34 = function (t, m) { | ||
return n.buildRepetition(t, m, m); | ||
@@ -740,12 +524,12 @@ }, | ||
peg$c36 = peg$literalExpectation(",", false), | ||
peg$c37 = function peg$c37(t, min) { | ||
peg$c37 = function (t, min) { | ||
return n.buildRepetition(t, min, Infinity); | ||
}, | ||
peg$c38 = function peg$c38(t, max) { | ||
peg$c38 = function (t, max) { | ||
return n.buildRepetition(t, 0, max); | ||
}, | ||
peg$c39 = function peg$c39(t, min, max) { | ||
peg$c39 = function (t, min, max) { | ||
return n.buildRepetition(t, min, max); | ||
}, | ||
peg$c40 = function peg$c40(x) { | ||
peg$c40 = function (x) { | ||
return new n.Literal(x); | ||
@@ -757,9 +541,6 @@ }, | ||
peg$c44 = peg$literalExpectation(")", false), | ||
peg$c45 = function peg$c45(e) { | ||
peg$c45 = function (e) { | ||
return e; | ||
}, | ||
peg$c46 = function peg$c46() { | ||
return n.buildRepetition(); | ||
}, | ||
peg$c47 = function peg$c47(a, b) { | ||
peg$c47 = function (a, b) { | ||
return a + b.join(''); | ||
@@ -773,3 +554,3 @@ }, | ||
peg$c53 = peg$classExpectation([["0", "9"]], false, false), | ||
peg$c54 = function peg$c54(num) { | ||
peg$c54 = function (num) { | ||
return parseInt(num.join('')); | ||
@@ -780,7 +561,8 @@ }, | ||
peg$currPos = 0, | ||
peg$savedPos = 0, | ||
peg$posDetailsCache = [{ line: 1, column: 1 }], | ||
peg$posDetailsCache = [{ | ||
line: 1, | ||
column: 1 | ||
}], | ||
peg$maxFailPos = 0, | ||
peg$maxFailExpected = [], | ||
peg$silentFails = 0, | ||
peg$result; | ||
@@ -796,42 +578,25 @@ | ||
function text() { | ||
return input.substring(peg$savedPos, peg$currPos); | ||
} | ||
function location() { | ||
return peg$computeLocation(peg$savedPos, peg$currPos); | ||
} | ||
function expected(description, location) { | ||
location = location !== void 0 ? location : peg$computeLocation(peg$savedPos, peg$currPos); | ||
throw peg$buildStructuredError([peg$otherExpectation(description)], input.substring(peg$savedPos, peg$currPos), location); | ||
} | ||
function error(message, location) { | ||
location = location !== void 0 ? location : peg$computeLocation(peg$savedPos, peg$currPos); | ||
throw peg$buildSimpleError(message, location); | ||
} | ||
function peg$literalExpectation(text, ignoreCase) { | ||
return { type: "literal", text: text, ignoreCase: ignoreCase }; | ||
return { | ||
type: "literal", | ||
text: text, | ||
ignoreCase: ignoreCase | ||
}; | ||
} | ||
function peg$classExpectation(parts, inverted, ignoreCase) { | ||
return { type: "class", parts: parts, inverted: inverted, ignoreCase: ignoreCase }; | ||
return { | ||
type: "class", | ||
parts: parts, | ||
inverted: inverted, | ||
ignoreCase: ignoreCase | ||
}; | ||
} | ||
function peg$anyExpectation() { | ||
return { type: "any" }; | ||
} | ||
function peg$endExpectation() { | ||
return { type: "end" }; | ||
return { | ||
type: "end" | ||
}; | ||
} | ||
function peg$otherExpectation(description) { | ||
return { type: "other", description: description }; | ||
} | ||
function peg$computePosDetails(pos) { | ||
@@ -845,2 +610,3 @@ var details = peg$posDetailsCache[pos], | ||
p = pos - 1; | ||
while (!peg$posDetailsCache[p]) { | ||
@@ -875,3 +641,2 @@ p--; | ||
endPosDetails = peg$computePosDetails(endPos); | ||
return { | ||
@@ -904,6 +669,2 @@ start: { | ||
function peg$buildSimpleError(message, location) { | ||
return new peg$SyntaxError(message, null, null, location); | ||
} | ||
function peg$buildStructuredError(expected, found, location) { | ||
@@ -915,5 +676,5 @@ return new peg$SyntaxError(peg$SyntaxError.buildMessage(expected, found), expected, found, location); | ||
var s0, s1; | ||
s0 = []; | ||
s1 = peg$parsestatement(); | ||
if (s1 !== peg$FAILED) { | ||
@@ -933,9 +694,9 @@ while (s1 !== peg$FAILED) { | ||
var s0, s1, s2; | ||
s0 = peg$currPos; | ||
s1 = peg$parsestatement_type(); | ||
if (s1 !== peg$FAILED) { | ||
s2 = peg$parse_(); | ||
if (s2 !== peg$FAILED) { | ||
peg$savedPos = s0; | ||
s1 = peg$c0(s1); | ||
@@ -957,4 +718,4 @@ s0 = s1; | ||
var s0; | ||
s0 = peg$parseassignment(); | ||
s0 = peg$parseassignment(); | ||
if (s0 === peg$FAILED) { | ||
@@ -969,4 +730,4 @@ s0 = peg$parsecomment(); | ||
var s0, s1, s2, s3; | ||
s0 = peg$currPos; | ||
s0 = peg$currPos; | ||
if (input.charCodeAt(peg$currPos) === 35) { | ||
@@ -977,8 +738,11 @@ s1 = peg$c1; | ||
s1 = peg$FAILED; | ||
if (peg$silentFails === 0) { | ||
{ | ||
peg$fail(peg$c2); | ||
} | ||
} | ||
if (s1 !== peg$FAILED) { | ||
s2 = []; | ||
if (peg$c3.test(input.charAt(peg$currPos))) { | ||
@@ -989,8 +753,11 @@ s3 = input.charAt(peg$currPos); | ||
s3 = peg$FAILED; | ||
if (peg$silentFails === 0) { | ||
{ | ||
peg$fail(peg$c4); | ||
} | ||
} | ||
while (s3 !== peg$FAILED) { | ||
s2.push(s3); | ||
if (peg$c3.test(input.charAt(peg$currPos))) { | ||
@@ -1001,3 +768,4 @@ s3 = input.charAt(peg$currPos); | ||
s3 = peg$FAILED; | ||
if (peg$silentFails === 0) { | ||
{ | ||
peg$fail(peg$c4); | ||
@@ -1007,2 +775,3 @@ } | ||
} | ||
if (s2 !== peg$FAILED) { | ||
@@ -1014,8 +783,9 @@ if (peg$c5.test(input.charAt(peg$currPos))) { | ||
s3 = peg$FAILED; | ||
if (peg$silentFails === 0) { | ||
{ | ||
peg$fail(peg$c6); | ||
} | ||
} | ||
if (s3 !== peg$FAILED) { | ||
peg$savedPos = s0; | ||
s1 = peg$c7(s2); | ||
@@ -1041,7 +811,8 @@ s0 = s1; | ||
var s0, s1, s2, s3, s4, s5, s6, s7; | ||
s0 = peg$currPos; | ||
s1 = peg$parsevariable(); | ||
if (s1 !== peg$FAILED) { | ||
s2 = peg$parse_(); | ||
if (s2 !== peg$FAILED) { | ||
@@ -1053,12 +824,17 @@ if (input.charCodeAt(peg$currPos) === 61) { | ||
s3 = peg$FAILED; | ||
if (peg$silentFails === 0) { | ||
{ | ||
peg$fail(peg$c9); | ||
} | ||
} | ||
if (s3 !== peg$FAILED) { | ||
s4 = peg$parse_(); | ||
if (s4 !== peg$FAILED) { | ||
s5 = peg$parsealternation(); | ||
if (s5 !== peg$FAILED) { | ||
s6 = peg$parse_(); | ||
if (s6 !== peg$FAILED) { | ||
@@ -1070,8 +846,9 @@ if (input.charCodeAt(peg$currPos) === 59) { | ||
s7 = peg$FAILED; | ||
if (peg$silentFails === 0) { | ||
{ | ||
peg$fail(peg$c11); | ||
} | ||
} | ||
if (s7 !== peg$FAILED) { | ||
peg$savedPos = s0; | ||
s1 = peg$c12(s1, s5); | ||
@@ -1113,11 +890,10 @@ s0 = s1; | ||
var s0, s1; | ||
s0 = peg$currPos; | ||
s1 = peg$parsename(); | ||
if (s1 !== peg$FAILED) { | ||
peg$savedPos = s0; | ||
s1 = peg$c13(s1); | ||
} | ||
s0 = s1; | ||
return s0; | ||
@@ -1128,7 +904,8 @@ } | ||
var s0, s1, s2, s3, s4, s5; | ||
s0 = peg$currPos; | ||
s1 = peg$parseconcatenation(); | ||
if (s1 !== peg$FAILED) { | ||
s2 = peg$parse_(); | ||
if (s2 !== peg$FAILED) { | ||
@@ -1140,12 +917,15 @@ if (input.charCodeAt(peg$currPos) === 124) { | ||
s3 = peg$FAILED; | ||
if (peg$silentFails === 0) { | ||
{ | ||
peg$fail(peg$c15); | ||
} | ||
} | ||
if (s3 !== peg$FAILED) { | ||
s4 = peg$parse_(); | ||
if (s4 !== peg$FAILED) { | ||
s5 = peg$parsealternation(); | ||
if (s5 !== peg$FAILED) { | ||
peg$savedPos = s0; | ||
s1 = peg$c16(s1, s5); | ||
@@ -1173,2 +953,3 @@ s0 = s1; | ||
} | ||
if (s0 === peg$FAILED) { | ||
@@ -1183,11 +964,12 @@ s0 = peg$parseconcatenation(); | ||
var s0, s1, s2, s3; | ||
s0 = peg$currPos; | ||
s1 = peg$parserepeat(); | ||
if (s1 !== peg$FAILED) { | ||
s2 = peg$parse_(); | ||
if (s2 !== peg$FAILED) { | ||
s3 = peg$parseconcatenation(); | ||
if (s3 !== peg$FAILED) { | ||
peg$savedPos = s0; | ||
s1 = peg$c17(s1, s3); | ||
@@ -1207,2 +989,3 @@ s0 = s1; | ||
} | ||
if (s0 === peg$FAILED) { | ||
@@ -1217,5 +1000,5 @@ s0 = peg$parserepeat(); | ||
var s0, s1, s2, s3, s4, s5, s6; | ||
s0 = peg$currPos; | ||
s1 = peg$parsename(); | ||
if (s1 !== peg$FAILED) { | ||
@@ -1227,10 +1010,12 @@ if (input.charCodeAt(peg$currPos) === 58) { | ||
s2 = peg$FAILED; | ||
if (peg$silentFails === 0) { | ||
{ | ||
peg$fail(peg$c19); | ||
} | ||
} | ||
if (s2 !== peg$FAILED) { | ||
s3 = peg$parserepeat(); | ||
if (s3 !== peg$FAILED) { | ||
peg$savedPos = s0; | ||
s1 = peg$c20(s1, s3); | ||
@@ -1250,5 +1035,7 @@ s0 = s1; | ||
} | ||
if (s0 === peg$FAILED) { | ||
s0 = peg$currPos; | ||
s1 = peg$parseterm(); | ||
if (s1 !== peg$FAILED) { | ||
@@ -1260,8 +1047,9 @@ if (input.charCodeAt(peg$currPos) === 42) { | ||
s2 = peg$FAILED; | ||
if (peg$silentFails === 0) { | ||
{ | ||
peg$fail(peg$c22); | ||
} | ||
} | ||
if (s2 !== peg$FAILED) { | ||
peg$savedPos = s0; | ||
s1 = peg$c23(s1); | ||
@@ -1277,5 +1065,7 @@ s0 = s1; | ||
} | ||
if (s0 === peg$FAILED) { | ||
s0 = peg$currPos; | ||
s1 = peg$parseterm(); | ||
if (s1 !== peg$FAILED) { | ||
@@ -1287,8 +1077,9 @@ if (input.charCodeAt(peg$currPos) === 63) { | ||
s2 = peg$FAILED; | ||
if (peg$silentFails === 0) { | ||
{ | ||
peg$fail(peg$c25); | ||
} | ||
} | ||
if (s2 !== peg$FAILED) { | ||
peg$savedPos = s0; | ||
s1 = peg$c26(s1); | ||
@@ -1304,5 +1095,7 @@ s0 = s1; | ||
} | ||
if (s0 === peg$FAILED) { | ||
s0 = peg$currPos; | ||
s1 = peg$parseterm(); | ||
if (s1 !== peg$FAILED) { | ||
@@ -1314,8 +1107,9 @@ if (input.charCodeAt(peg$currPos) === 43) { | ||
s2 = peg$FAILED; | ||
if (peg$silentFails === 0) { | ||
{ | ||
peg$fail(peg$c28); | ||
} | ||
} | ||
if (s2 !== peg$FAILED) { | ||
peg$savedPos = s0; | ||
s1 = peg$c29(s1); | ||
@@ -1331,5 +1125,7 @@ s0 = s1; | ||
} | ||
if (s0 === peg$FAILED) { | ||
s0 = peg$currPos; | ||
s1 = peg$parseterm(); | ||
if (s1 !== peg$FAILED) { | ||
@@ -1341,8 +1137,11 @@ if (input.charCodeAt(peg$currPos) === 123) { | ||
s2 = peg$FAILED; | ||
if (peg$silentFails === 0) { | ||
{ | ||
peg$fail(peg$c31); | ||
} | ||
} | ||
if (s2 !== peg$FAILED) { | ||
s3 = peg$parsenumber(); | ||
if (s3 !== peg$FAILED) { | ||
@@ -1354,8 +1153,9 @@ if (input.charCodeAt(peg$currPos) === 125) { | ||
s4 = peg$FAILED; | ||
if (peg$silentFails === 0) { | ||
{ | ||
peg$fail(peg$c33); | ||
} | ||
} | ||
if (s4 !== peg$FAILED) { | ||
peg$savedPos = s0; | ||
s1 = peg$c34(s1, s3); | ||
@@ -1379,5 +1179,7 @@ s0 = s1; | ||
} | ||
if (s0 === peg$FAILED) { | ||
s0 = peg$currPos; | ||
s1 = peg$parseterm(); | ||
if (s1 !== peg$FAILED) { | ||
@@ -1389,8 +1191,11 @@ if (input.charCodeAt(peg$currPos) === 123) { | ||
s2 = peg$FAILED; | ||
if (peg$silentFails === 0) { | ||
{ | ||
peg$fail(peg$c31); | ||
} | ||
} | ||
if (s2 !== peg$FAILED) { | ||
s3 = peg$parsenumber(); | ||
if (s3 !== peg$FAILED) { | ||
@@ -1402,6 +1207,8 @@ if (input.charCodeAt(peg$currPos) === 44) { | ||
s4 = peg$FAILED; | ||
if (peg$silentFails === 0) { | ||
{ | ||
peg$fail(peg$c36); | ||
} | ||
} | ||
if (s4 !== peg$FAILED) { | ||
@@ -1413,8 +1220,9 @@ if (input.charCodeAt(peg$currPos) === 125) { | ||
s5 = peg$FAILED; | ||
if (peg$silentFails === 0) { | ||
{ | ||
peg$fail(peg$c33); | ||
} | ||
} | ||
if (s5 !== peg$FAILED) { | ||
peg$savedPos = s0; | ||
s1 = peg$c37(s1, s3); | ||
@@ -1442,5 +1250,7 @@ s0 = s1; | ||
} | ||
if (s0 === peg$FAILED) { | ||
s0 = peg$currPos; | ||
s1 = peg$parseterm(); | ||
if (s1 !== peg$FAILED) { | ||
@@ -1452,6 +1262,8 @@ if (input.charCodeAt(peg$currPos) === 123) { | ||
s2 = peg$FAILED; | ||
if (peg$silentFails === 0) { | ||
{ | ||
peg$fail(peg$c31); | ||
} | ||
} | ||
if (s2 !== peg$FAILED) { | ||
@@ -1463,8 +1275,11 @@ if (input.charCodeAt(peg$currPos) === 44) { | ||
s3 = peg$FAILED; | ||
if (peg$silentFails === 0) { | ||
{ | ||
peg$fail(peg$c36); | ||
} | ||
} | ||
if (s3 !== peg$FAILED) { | ||
s4 = peg$parsenumber(); | ||
if (s4 !== peg$FAILED) { | ||
@@ -1476,8 +1291,9 @@ if (input.charCodeAt(peg$currPos) === 125) { | ||
s5 = peg$FAILED; | ||
if (peg$silentFails === 0) { | ||
{ | ||
peg$fail(peg$c33); | ||
} | ||
} | ||
if (s5 !== peg$FAILED) { | ||
peg$savedPos = s0; | ||
s1 = peg$c38(s1, s4); | ||
@@ -1505,5 +1321,7 @@ s0 = s1; | ||
} | ||
if (s0 === peg$FAILED) { | ||
s0 = peg$currPos; | ||
s1 = peg$parseterm(); | ||
if (s1 !== peg$FAILED) { | ||
@@ -1515,8 +1333,11 @@ if (input.charCodeAt(peg$currPos) === 123) { | ||
s2 = peg$FAILED; | ||
if (peg$silentFails === 0) { | ||
{ | ||
peg$fail(peg$c31); | ||
} | ||
} | ||
if (s2 !== peg$FAILED) { | ||
s3 = peg$parsenumber(); | ||
if (s3 !== peg$FAILED) { | ||
@@ -1528,8 +1349,11 @@ if (input.charCodeAt(peg$currPos) === 44) { | ||
s4 = peg$FAILED; | ||
if (peg$silentFails === 0) { | ||
{ | ||
peg$fail(peg$c36); | ||
} | ||
} | ||
if (s4 !== peg$FAILED) { | ||
s5 = peg$parsenumber(); | ||
if (s5 !== peg$FAILED) { | ||
@@ -1541,8 +1365,9 @@ if (input.charCodeAt(peg$currPos) === 125) { | ||
s6 = peg$FAILED; | ||
if (peg$silentFails === 0) { | ||
{ | ||
peg$fail(peg$c33); | ||
} | ||
} | ||
if (s6 !== peg$FAILED) { | ||
peg$savedPos = s0; | ||
s1 = peg$c39(s1, s3, s5); | ||
@@ -1574,2 +1399,3 @@ s0 = s1; | ||
} | ||
if (s0 === peg$FAILED) { | ||
@@ -1591,14 +1417,17 @@ s0 = peg$parseterm(); | ||
var s0, s1, s2, s3; | ||
s0 = peg$parsevariable(); | ||
s0 = peg$parsevariable(); | ||
if (s0 === peg$FAILED) { | ||
s0 = peg$currPos; | ||
s1 = peg$parsenumber(); | ||
if (s1 !== peg$FAILED) { | ||
peg$savedPos = s0; | ||
s1 = peg$c40(s1); | ||
} | ||
s0 = s1; | ||
if (s0 === peg$FAILED) { | ||
s0 = peg$currPos; | ||
if (input.charCodeAt(peg$currPos) === 40) { | ||
@@ -1609,8 +1438,11 @@ s1 = peg$c41; | ||
s1 = peg$FAILED; | ||
if (peg$silentFails === 0) { | ||
{ | ||
peg$fail(peg$c42); | ||
} | ||
} | ||
if (s1 !== peg$FAILED) { | ||
s2 = peg$parsealternation(); | ||
if (s2 !== peg$FAILED) { | ||
@@ -1622,8 +1454,9 @@ if (input.charCodeAt(peg$currPos) === 41) { | ||
s3 = peg$FAILED; | ||
if (peg$silentFails === 0) { | ||
{ | ||
peg$fail(peg$c44); | ||
} | ||
} | ||
if (s3 !== peg$FAILED) { | ||
peg$savedPos = s0; | ||
s1 = peg$c45(s2); | ||
@@ -1649,55 +1482,11 @@ s0 = s1; | ||
function peg$parserepetition() { | ||
var s0, s1, s2, s3; | ||
s0 = peg$currPos; | ||
if (input.charCodeAt(peg$currPos) === 123) { | ||
s1 = peg$c30; | ||
peg$currPos++; | ||
} else { | ||
s1 = peg$FAILED; | ||
if (peg$silentFails === 0) { | ||
peg$fail(peg$c31); | ||
} | ||
} | ||
if (s1 !== peg$FAILED) { | ||
s2 = peg$parsenumber(); | ||
if (s2 !== peg$FAILED) { | ||
if (input.charCodeAt(peg$currPos) === 125) { | ||
s3 = peg$c32; | ||
peg$currPos++; | ||
} else { | ||
s3 = peg$FAILED; | ||
if (peg$silentFails === 0) { | ||
peg$fail(peg$c33); | ||
} | ||
} | ||
if (s3 !== peg$FAILED) { | ||
peg$savedPos = s0; | ||
s1 = peg$c46(); | ||
s0 = s1; | ||
} else { | ||
peg$currPos = s0; | ||
s0 = peg$FAILED; | ||
} | ||
} else { | ||
peg$currPos = s0; | ||
s0 = peg$FAILED; | ||
} | ||
} else { | ||
peg$currPos = s0; | ||
s0 = peg$FAILED; | ||
} | ||
return s0; | ||
} | ||
function peg$parsename() { | ||
var s0, s1, s2, s3; | ||
s0 = peg$currPos; | ||
s1 = peg$parsename_start_char(); | ||
if (s1 !== peg$FAILED) { | ||
s2 = []; | ||
s3 = peg$parsename_char(); | ||
while (s3 !== peg$FAILED) { | ||
@@ -1707,4 +1496,4 @@ s2.push(s3); | ||
} | ||
if (s2 !== peg$FAILED) { | ||
peg$savedPos = s0; | ||
s1 = peg$c47(s1, s2); | ||
@@ -1732,6 +1521,8 @@ s0 = s1; | ||
s0 = peg$FAILED; | ||
if (peg$silentFails === 0) { | ||
{ | ||
peg$fail(peg$c49); | ||
} | ||
} | ||
if (s0 === peg$FAILED) { | ||
@@ -1743,3 +1534,4 @@ if (peg$c50.test(input.charAt(peg$currPos))) { | ||
s0 = peg$FAILED; | ||
if (peg$silentFails === 0) { | ||
{ | ||
peg$fail(peg$c51); | ||
@@ -1755,4 +1547,4 @@ } | ||
var s0; | ||
s0 = peg$parsename_start_char(); | ||
s0 = peg$parsename_start_char(); | ||
if (s0 === peg$FAILED) { | ||
@@ -1764,3 +1556,4 @@ if (peg$c52.test(input.charAt(peg$currPos))) { | ||
s0 = peg$FAILED; | ||
if (peg$silentFails === 0) { | ||
{ | ||
peg$fail(peg$c53); | ||
@@ -1776,5 +1569,5 @@ } | ||
var s0, s1, s2; | ||
s0 = peg$currPos; | ||
s1 = []; | ||
if (peg$c52.test(input.charAt(peg$currPos))) { | ||
@@ -1785,9 +1578,12 @@ s2 = input.charAt(peg$currPos); | ||
s2 = peg$FAILED; | ||
if (peg$silentFails === 0) { | ||
{ | ||
peg$fail(peg$c53); | ||
} | ||
} | ||
if (s2 !== peg$FAILED) { | ||
while (s2 !== peg$FAILED) { | ||
s1.push(s2); | ||
if (peg$c52.test(input.charAt(peg$currPos))) { | ||
@@ -1798,3 +1594,4 @@ s2 = input.charAt(peg$currPos); | ||
s2 = peg$FAILED; | ||
if (peg$silentFails === 0) { | ||
{ | ||
peg$fail(peg$c53); | ||
@@ -1807,8 +1604,8 @@ } | ||
} | ||
if (s1 !== peg$FAILED) { | ||
peg$savedPos = s0; | ||
s1 = peg$c54(s1); | ||
} | ||
s0 = s1; | ||
return s0; | ||
@@ -1819,4 +1616,4 @@ } | ||
var s0, s1; | ||
s0 = []; | ||
s0 = []; | ||
if (peg$c55.test(input.charAt(peg$currPos))) { | ||
@@ -1827,8 +1624,11 @@ s1 = input.charAt(peg$currPos); | ||
s1 = peg$FAILED; | ||
if (peg$silentFails === 0) { | ||
{ | ||
peg$fail(peg$c56); | ||
} | ||
} | ||
while (s1 !== peg$FAILED) { | ||
s0.push(s1); | ||
if (peg$c55.test(input.charAt(peg$currPos))) { | ||
@@ -1839,3 +1639,4 @@ s1 = input.charAt(peg$currPos); | ||
s1 = peg$FAILED; | ||
if (peg$silentFails === 0) { | ||
{ | ||
peg$fail(peg$c56); | ||
@@ -1849,4 +1650,3 @@ } | ||
var n = require$$0; | ||
var n = nodes; | ||
peg$result = peg$startRuleFunction(); | ||
@@ -1874,8 +1674,4 @@ | ||
var SymbolTable = function () { | ||
function SymbolTable(statements) { | ||
var externalSymbols = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | ||
_classCallCheck(this, SymbolTable); | ||
class SymbolTable { | ||
constructor(statements, externalSymbols = {}) { | ||
this.variables = {}; | ||
@@ -1885,3 +1681,2 @@ this.symbols = {}; | ||
this.size = 0; | ||
this.addExternalSymbols(externalSymbols); | ||
@@ -1891,78 +1686,50 @@ this.process(statements); | ||
_createClass(SymbolTable, [{ | ||
key: 'addExternalSymbols', | ||
value: function addExternalSymbols(externalSymbols) { | ||
for (var key in externalSymbols) { | ||
this.variables[key] = new Literal(externalSymbols[key]); | ||
this.symbols[key] = externalSymbols[key]; | ||
this.size++; | ||
} | ||
addExternalSymbols(externalSymbols) { | ||
for (var key in externalSymbols) { | ||
this.variables[key] = new Literal(externalSymbols[key]); | ||
this.symbols[key] = externalSymbols[key]; | ||
this.size++; | ||
} | ||
}, { | ||
key: 'process', | ||
value: function process(statements) { | ||
var _iteratorNormalCompletion = true; | ||
var _didIteratorError = false; | ||
var _iteratorError = undefined; | ||
} | ||
try { | ||
for (var _iterator = _getIterator(statements), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { | ||
var statement = _step.value; | ||
process(statements) { | ||
for (var statement of statements) { | ||
if (statement instanceof Assignment) { | ||
this.variables[statement.variable.name] = this.processExpression(statement.expression); | ||
if (statement instanceof Assignment) { | ||
this.variables[statement.variable.name] = this.processExpression(statement.expression); | ||
if (statement.expression instanceof Literal) { | ||
this.symbols[statement.variable.name] = statement.expression.value; | ||
this.size++; | ||
} | ||
} | ||
if (statement.expression instanceof Literal) { | ||
this.symbols[statement.variable.name] = statement.expression.value; | ||
this.size++; | ||
} | ||
} catch (err) { | ||
_didIteratorError = true; | ||
_iteratorError = err; | ||
} finally { | ||
try { | ||
if (!_iteratorNormalCompletion && _iterator.return) { | ||
_iterator.return(); | ||
} | ||
} finally { | ||
if (_didIteratorError) { | ||
throw _iteratorError; | ||
} | ||
} | ||
} | ||
} | ||
this.main = this.variables.main; | ||
if (!this.main) { | ||
throw new Error('No main variable declaration found'); | ||
} | ||
this.main = this.variables.main; | ||
if (!this.main) { | ||
throw new Error('No main variable declaration found'); | ||
} | ||
}, { | ||
key: 'processExpression', | ||
value: function processExpression(expr) { | ||
// Process children | ||
for (var key in expr) { | ||
if (expr[key] instanceof Node) { | ||
expr[key] = this.processExpression(expr[key]); | ||
} | ||
} | ||
processExpression(expr) { | ||
// Process children | ||
for (var key in expr) { | ||
if (expr[key] instanceof Node) { | ||
expr[key] = this.processExpression(expr[key]); | ||
} | ||
} // Replace variable references with their values | ||
// Replace variable references with their values | ||
if (expr instanceof Variable) { | ||
var value = this.variables[expr.name]; | ||
if (value == null) throw new Error('Undeclared indentifier ' + expr.name); | ||
expr = this.processExpression(value.copy()); | ||
} | ||
return expr; | ||
if (expr instanceof Variable) { | ||
var value = this.variables[expr.name]; | ||
if (value == null) throw new Error("Undeclared indentifier ".concat(expr.name)); | ||
expr = this.processExpression(value.copy()); | ||
} | ||
}]); | ||
return SymbolTable; | ||
}(); | ||
return expr; | ||
} | ||
} | ||
var END_MARKER = new EndMarker(); | ||
/** | ||
@@ -1975,11 +1742,10 @@ * This is an implementation of the direct regular expression to DFA algorithm described | ||
*/ | ||
function buildDFA(root, numSymbols) { | ||
root = new Concatenation(root, END_MARKER); | ||
root.calcFollowpos(); | ||
var failState = new State(new _Set(), numSymbols); | ||
var failState = new State(new Set(), numSymbols); | ||
var initialState = new State(root.firstpos, numSymbols); | ||
var dstates = [failState, initialState]; | ||
var dstates = [failState, initialState]; // while there is an unmarked state S in dstates | ||
// while there is an unmarked state S in dstates | ||
while (1) { | ||
@@ -1997,37 +1763,16 @@ var s = null; | ||
break; | ||
} | ||
} // mark S | ||
// mark S | ||
s.marked = true; | ||
// for each input symbol a | ||
s.marked = true; // for each input symbol a | ||
for (var a = 0; a < numSymbols; a++) { | ||
// let U be the union of followpos(p) for all | ||
// p in S that correspond to a | ||
var u = new _Set(); | ||
var _iteratorNormalCompletion = true; | ||
var _didIteratorError = false; | ||
var _iteratorError = undefined; | ||
var u = new Set(); | ||
try { | ||
for (var _iterator = _getIterator(s.positions), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { | ||
var p = _step.value; | ||
if (p instanceof Literal && p.value === a) { | ||
addAll(u, p.followpos); | ||
} | ||
for (var p of s.positions) { | ||
if (p instanceof Literal && p.value === a) { | ||
addAll(u, p.followpos); | ||
} | ||
} catch (err) { | ||
_didIteratorError = true; | ||
_iteratorError = err; | ||
} finally { | ||
try { | ||
if (!_iteratorNormalCompletion && _iterator.return) { | ||
_iterator.return(); | ||
} | ||
} finally { | ||
if (_didIteratorError) { | ||
throw _iteratorError; | ||
} | ||
} | ||
} | ||
@@ -2037,6 +1782,7 @@ | ||
continue; | ||
} | ||
} // if U is not in dstates | ||
// if U is not in dstates | ||
var ux = -1; | ||
for (var i = 0; i < dstates.length; i++) { | ||
@@ -2062,19 +1808,11 @@ if (equal(u, dstates[i].positions)) { | ||
var State = function State(positions, len) { | ||
_classCallCheck(this, State); | ||
class State { | ||
constructor(positions, len) { | ||
this.positions = positions; | ||
this.transitions = new Uint16Array(len); | ||
this.accepting = positions.has(END_MARKER); | ||
this.marked = false; | ||
this.tags = new Set(); | ||
this.positions = positions; | ||
this.transitions = new Uint16Array(len); | ||
this.accepting = positions.has(END_MARKER); | ||
this.marked = false; | ||
this.tags = new _Set(); | ||
var _iteratorNormalCompletion2 = true; | ||
var _didIteratorError2 = false; | ||
var _iteratorError2 = undefined; | ||
try { | ||
for (var _iterator2 = _getIterator(positions), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { | ||
var pos = _step2.value; | ||
for (var pos of positions) { | ||
if (pos instanceof Tag) { | ||
@@ -2084,21 +1822,8 @@ this.tags.add(pos.name); | ||
} | ||
} catch (err) { | ||
_didIteratorError2 = true; | ||
_iteratorError2 = err; | ||
} finally { | ||
try { | ||
if (!_iteratorNormalCompletion2 && _iterator2.return) { | ||
_iterator2.return(); | ||
} | ||
} finally { | ||
if (_didIteratorError2) { | ||
throw _iteratorError2; | ||
} | ||
} | ||
} | ||
}; | ||
} | ||
var INITIAL_STATE = 1; | ||
var FAIL_STATE = 0; | ||
/** | ||
@@ -2109,6 +1834,4 @@ * A StateMachine represents a deterministic finite automaton. | ||
var StateMachine = function () { | ||
function StateMachine(dfa) { | ||
_classCallCheck(this, StateMachine); | ||
class StateMachine { | ||
constructor(dfa) { | ||
this.stateTable = dfa.stateTable; | ||
@@ -2118,3 +1841,2 @@ this.accepting = dfa.accepting; | ||
} | ||
/** | ||
@@ -2126,155 +1848,69 @@ * Returns an iterable object that yields pattern matches over the input sequence. | ||
_createClass(StateMachine, [{ | ||
key: 'match', | ||
value: function match(str) { | ||
var self = this; | ||
return _defineProperty({}, _Symbol$iterator, _regeneratorRuntime.mark(function _callee() { | ||
var state, startRun, lastAccepting, lastState, p, c; | ||
return _regeneratorRuntime.wrap(function _callee$(_context) { | ||
while (1) { | ||
switch (_context.prev = _context.next) { | ||
case 0: | ||
state = INITIAL_STATE; | ||
startRun = null; | ||
lastAccepting = null; | ||
lastState = null; | ||
p = 0; | ||
match(str) { | ||
var self = this; | ||
return { | ||
*[Symbol.iterator]() { | ||
var state = INITIAL_STATE; | ||
var startRun = null; | ||
var lastAccepting = null; | ||
var lastState = null; | ||
case 5: | ||
if (!(p < str.length)) { | ||
_context.next = 21; | ||
break; | ||
} | ||
for (var p = 0; p < str.length; p++) { | ||
var c = str[p]; | ||
lastState = state; | ||
state = self.stateTable[state][c]; | ||
c = str[p]; | ||
if (state === FAIL_STATE) { | ||
// yield the last match if any | ||
if (startRun != null && lastAccepting != null && lastAccepting >= startRun) { | ||
yield [startRun, lastAccepting, self.tags[lastState]]; | ||
} // reset the state as if we started over from the initial state | ||
lastState = state; | ||
state = self.stateTable[state][c]; | ||
state = self.stateTable[INITIAL_STATE][c]; | ||
startRun = null; | ||
} // start a run if not in the failure state | ||
if (!(state === FAIL_STATE)) { | ||
_context.next = 15; | ||
break; | ||
} | ||
if (!(startRun != null && lastAccepting != null && lastAccepting >= startRun)) { | ||
_context.next = 13; | ||
break; | ||
} | ||
if (state !== FAIL_STATE && startRun == null) { | ||
startRun = p; | ||
} // if accepting, mark the potential match end | ||
_context.next = 13; | ||
return [startRun, lastAccepting, self.tags[lastState]]; | ||
case 13: | ||
if (self.accepting[state]) { | ||
lastAccepting = p; | ||
} // reset the state to the initial state if we get into the failure state | ||
// reset the state as if we started over from the initial state | ||
state = self.stateTable[INITIAL_STATE][c]; | ||
startRun = null; | ||
case 15: | ||
// start a run if not in the failure state | ||
if (state !== FAIL_STATE && startRun == null) { | ||
startRun = p; | ||
} | ||
// if accepting, mark the potential match end | ||
if (self.accepting[state]) { | ||
lastAccepting = p; | ||
} | ||
// reset the state to the initial state if we get into the failure state | ||
if (state === FAIL_STATE) { | ||
state = INITIAL_STATE; | ||
} | ||
case 18: | ||
p++; | ||
_context.next = 5; | ||
break; | ||
case 21: | ||
if (!(startRun != null && lastAccepting != null && lastAccepting >= startRun)) { | ||
_context.next = 24; | ||
break; | ||
} | ||
_context.next = 24; | ||
return [startRun, lastAccepting, self.tags[state]]; | ||
case 24: | ||
case 'end': | ||
return _context.stop(); | ||
} | ||
if (state === FAIL_STATE) { | ||
state = INITIAL_STATE; | ||
} | ||
}, _callee, this); | ||
})); | ||
} | ||
} // yield the last match if any | ||
/** | ||
* For each match over the input sequence, action functions matching | ||
* the tag definitions in the input pattern are called with the startIndex, | ||
* endIndex, and sub-match sequence. | ||
*/ | ||
}, { | ||
key: 'apply', | ||
value: function apply(str, actions) { | ||
var _iteratorNormalCompletion = true; | ||
var _didIteratorError = false; | ||
var _iteratorError = undefined; | ||
if (startRun != null && lastAccepting != null && lastAccepting >= startRun) { | ||
yield [startRun, lastAccepting, self.tags[state]]; | ||
} | ||
} | ||
try { | ||
for (var _iterator = _getIterator(this.match(str)), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { | ||
var _step$value = _slicedToArray(_step.value, 3); | ||
}; | ||
} | ||
/** | ||
* For each match over the input sequence, action functions matching | ||
* the tag definitions in the input pattern are called with the startIndex, | ||
* endIndex, and sub-match sequence. | ||
*/ | ||
var start = _step$value[0]; | ||
var end = _step$value[1]; | ||
var tags = _step$value[2]; | ||
var _iteratorNormalCompletion2 = true; | ||
var _didIteratorError2 = false; | ||
var _iteratorError2 = undefined; | ||
try { | ||
for (var _iterator2 = _getIterator(tags), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { | ||
var tag = _step2.value; | ||
if (typeof actions[tag] === 'function') { | ||
actions[tag](start, end, str.slice(start, end + 1)); | ||
} | ||
} | ||
} catch (err) { | ||
_didIteratorError2 = true; | ||
_iteratorError2 = err; | ||
} finally { | ||
try { | ||
if (!_iteratorNormalCompletion2 && _iterator2.return) { | ||
_iterator2.return(); | ||
} | ||
} finally { | ||
if (_didIteratorError2) { | ||
throw _iteratorError2; | ||
} | ||
} | ||
} | ||
apply(str, actions) { | ||
for (var [start, end, tags] of this.match(str)) { | ||
for (var tag of tags) { | ||
if (typeof actions[tag] === 'function') { | ||
actions[tag](start, end, str.slice(start, end + 1)); | ||
} | ||
} catch (err) { | ||
_didIteratorError = true; | ||
_iteratorError = err; | ||
} finally { | ||
try { | ||
if (!_iteratorNormalCompletion && _iterator.return) { | ||
_iterator.return(); | ||
} | ||
} finally { | ||
if (_didIteratorError) { | ||
throw _iteratorError; | ||
} | ||
} | ||
} | ||
} | ||
}]); | ||
} | ||
return StateMachine; | ||
}(); | ||
} | ||
@@ -2285,19 +1921,10 @@ function parse(string, externalSymbols) { | ||
} | ||
function build(symbolTable) { | ||
var states = buildDFA(symbolTable.main, symbolTable.size); | ||
return new StateMachine({ | ||
stateTable: states.map(function (s) { | ||
return _Array$from(s.transitions); | ||
}), | ||
accepting: states.map(function (s) { | ||
return s.accepting; | ||
}), | ||
tags: states.map(function (s) { | ||
return _Array$from(s.tags); | ||
}) | ||
stateTable: states.map(s => Array.from(s.transitions)), | ||
accepting: states.map(s => s.accepting), | ||
tags: states.map(s => Array.from(s.tags)) | ||
}); | ||
} | ||
function compile(string, externalSymbols) { | ||
@@ -2307,5 +1934,5 @@ return build(parse(string, externalSymbols)); | ||
exports.build = build; | ||
exports.default = compile; | ||
exports.parse = parse; | ||
exports.build = build; | ||
exports['default'] = compile; | ||
//# sourceMappingURL=compile.js.map |
198
index.js
'use strict'; | ||
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } | ||
var _slicedToArray = _interopDefault(require('babel-runtime/helpers/slicedToArray')); | ||
var _getIterator = _interopDefault(require('babel-runtime/core-js/get-iterator')); | ||
var _defineProperty = _interopDefault(require('babel-runtime/helpers/defineProperty')); | ||
var _regeneratorRuntime = _interopDefault(require('babel-runtime/regenerator')); | ||
var _Symbol$iterator = _interopDefault(require('babel-runtime/core-js/symbol/iterator')); | ||
var _classCallCheck = _interopDefault(require('babel-runtime/helpers/classCallCheck')); | ||
var _createClass = _interopDefault(require('babel-runtime/helpers/createClass')); | ||
var INITIAL_STATE = 1; | ||
var FAIL_STATE = 0; | ||
/** | ||
@@ -21,6 +10,4 @@ * A StateMachine represents a deterministic finite automaton. | ||
var StateMachine = function () { | ||
function StateMachine(dfa) { | ||
_classCallCheck(this, StateMachine); | ||
class StateMachine { | ||
constructor(dfa) { | ||
this.stateTable = dfa.stateTable; | ||
@@ -30,3 +17,2 @@ this.accepting = dfa.accepting; | ||
} | ||
/** | ||
@@ -38,157 +24,71 @@ * Returns an iterable object that yields pattern matches over the input sequence. | ||
_createClass(StateMachine, [{ | ||
key: 'match', | ||
value: function match(str) { | ||
var self = this; | ||
return _defineProperty({}, _Symbol$iterator, _regeneratorRuntime.mark(function _callee() { | ||
var state, startRun, lastAccepting, lastState, p, c; | ||
return _regeneratorRuntime.wrap(function _callee$(_context) { | ||
while (1) { | ||
switch (_context.prev = _context.next) { | ||
case 0: | ||
state = INITIAL_STATE; | ||
startRun = null; | ||
lastAccepting = null; | ||
lastState = null; | ||
p = 0; | ||
match(str) { | ||
var self = this; | ||
return { | ||
*[Symbol.iterator]() { | ||
var state = INITIAL_STATE; | ||
var startRun = null; | ||
var lastAccepting = null; | ||
var lastState = null; | ||
case 5: | ||
if (!(p < str.length)) { | ||
_context.next = 21; | ||
break; | ||
} | ||
for (var p = 0; p < str.length; p++) { | ||
var c = str[p]; | ||
lastState = state; | ||
state = self.stateTable[state][c]; | ||
c = str[p]; | ||
if (state === FAIL_STATE) { | ||
// yield the last match if any | ||
if (startRun != null && lastAccepting != null && lastAccepting >= startRun) { | ||
yield [startRun, lastAccepting, self.tags[lastState]]; | ||
} // reset the state as if we started over from the initial state | ||
lastState = state; | ||
state = self.stateTable[state][c]; | ||
state = self.stateTable[INITIAL_STATE][c]; | ||
startRun = null; | ||
} // start a run if not in the failure state | ||
if (!(state === FAIL_STATE)) { | ||
_context.next = 15; | ||
break; | ||
} | ||
if (!(startRun != null && lastAccepting != null && lastAccepting >= startRun)) { | ||
_context.next = 13; | ||
break; | ||
} | ||
if (state !== FAIL_STATE && startRun == null) { | ||
startRun = p; | ||
} // if accepting, mark the potential match end | ||
_context.next = 13; | ||
return [startRun, lastAccepting, self.tags[lastState]]; | ||
case 13: | ||
if (self.accepting[state]) { | ||
lastAccepting = p; | ||
} // reset the state to the initial state if we get into the failure state | ||
// reset the state as if we started over from the initial state | ||
state = self.stateTable[INITIAL_STATE][c]; | ||
startRun = null; | ||
case 15: | ||
// start a run if not in the failure state | ||
if (state !== FAIL_STATE && startRun == null) { | ||
startRun = p; | ||
} | ||
// if accepting, mark the potential match end | ||
if (self.accepting[state]) { | ||
lastAccepting = p; | ||
} | ||
// reset the state to the initial state if we get into the failure state | ||
if (state === FAIL_STATE) { | ||
state = INITIAL_STATE; | ||
} | ||
case 18: | ||
p++; | ||
_context.next = 5; | ||
break; | ||
case 21: | ||
if (!(startRun != null && lastAccepting != null && lastAccepting >= startRun)) { | ||
_context.next = 24; | ||
break; | ||
} | ||
_context.next = 24; | ||
return [startRun, lastAccepting, self.tags[state]]; | ||
case 24: | ||
case 'end': | ||
return _context.stop(); | ||
} | ||
if (state === FAIL_STATE) { | ||
state = INITIAL_STATE; | ||
} | ||
}, _callee, this); | ||
})); | ||
} | ||
} // yield the last match if any | ||
/** | ||
* For each match over the input sequence, action functions matching | ||
* the tag definitions in the input pattern are called with the startIndex, | ||
* endIndex, and sub-match sequence. | ||
*/ | ||
}, { | ||
key: 'apply', | ||
value: function apply(str, actions) { | ||
var _iteratorNormalCompletion = true; | ||
var _didIteratorError = false; | ||
var _iteratorError = undefined; | ||
if (startRun != null && lastAccepting != null && lastAccepting >= startRun) { | ||
yield [startRun, lastAccepting, self.tags[state]]; | ||
} | ||
} | ||
try { | ||
for (var _iterator = _getIterator(this.match(str)), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { | ||
var _step$value = _slicedToArray(_step.value, 3); | ||
}; | ||
} | ||
/** | ||
* For each match over the input sequence, action functions matching | ||
* the tag definitions in the input pattern are called with the startIndex, | ||
* endIndex, and sub-match sequence. | ||
*/ | ||
var start = _step$value[0]; | ||
var end = _step$value[1]; | ||
var tags = _step$value[2]; | ||
var _iteratorNormalCompletion2 = true; | ||
var _didIteratorError2 = false; | ||
var _iteratorError2 = undefined; | ||
try { | ||
for (var _iterator2 = _getIterator(tags), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { | ||
var tag = _step2.value; | ||
if (typeof actions[tag] === 'function') { | ||
actions[tag](start, end, str.slice(start, end + 1)); | ||
} | ||
} | ||
} catch (err) { | ||
_didIteratorError2 = true; | ||
_iteratorError2 = err; | ||
} finally { | ||
try { | ||
if (!_iteratorNormalCompletion2 && _iterator2.return) { | ||
_iterator2.return(); | ||
} | ||
} finally { | ||
if (_didIteratorError2) { | ||
throw _iteratorError2; | ||
} | ||
} | ||
} | ||
apply(str, actions) { | ||
for (var [start, end, tags] of this.match(str)) { | ||
for (var tag of tags) { | ||
if (typeof actions[tag] === 'function') { | ||
actions[tag](start, end, str.slice(start, end + 1)); | ||
} | ||
} catch (err) { | ||
_didIteratorError = true; | ||
_iteratorError = err; | ||
} finally { | ||
try { | ||
if (!_iteratorNormalCompletion && _iterator.return) { | ||
_iterator.return(); | ||
} | ||
} finally { | ||
if (_didIteratorError) { | ||
throw _iteratorError; | ||
} | ||
} | ||
} | ||
} | ||
}]); | ||
} | ||
return StateMachine; | ||
}(); | ||
} | ||
module.exports = StateMachine; | ||
//# sourceMappingURL=index.js.map |
{ | ||
"name": "dfa", | ||
"version": "1.1.0", | ||
"version": "1.2.0", | ||
"description": "A state machine compiler", | ||
"main": "index.js", | ||
"dependencies": { | ||
"babel-runtime": "^6.11.6" | ||
}, | ||
"devDependencies": { | ||
"babel-core": "^6.17.0", | ||
"babel-plugin-transform-runtime": "^6.15.0", | ||
"babel-polyfill": "^6.16.0", | ||
"babel-preset-es2015": "^6.16.0", | ||
"babel-register": "^6.16.3", | ||
"@babel/core": "^7.0.0", | ||
"@babel/preset-env": "^7.0.0", | ||
"@babel/register": "^7.0.0", | ||
"mocha": "^3.1.0", | ||
"pegjs": "^0.10.0", | ||
"rollup": "^0.36.1", | ||
"rollup-plugin-babel": "^2.6.1", | ||
"rollup-plugin-commonjs": "^5.0.4", | ||
"rollup": "^1.5.0", | ||
"rollup-plugin-babel": "^4.0.1", | ||
"rollup-plugin-commonjs": "^9.2.1", | ||
"rollup-plugin-local-resolve": "^1.0.7" | ||
}, | ||
"scripts": { | ||
"test": "mocha --require babel-register --require babel-polyfill", | ||
"test": "mocha --require @babel/register", | ||
"prepublish": "make" | ||
@@ -25,0 +20,0 @@ }, |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
0
9
137726
1594
- Removedbabel-runtime@^6.11.6
- Removedbabel-runtime@6.26.0(transitive)
- Removedcore-js@2.6.12(transitive)
- Removedregenerator-runtime@0.11.1(transitive)