42 lines
2.0 KiB
JavaScript
42 lines
2.0 KiB
JavaScript
"use strict";
|
|
// Lookahead keys are 32Bit integers in the form
|
|
// TTTTTTTT-ZZZZZZZZZZZZ-YYYY-XXXXXXXX
|
|
// XXXX -> Occurrence Index bitmap.
|
|
// YYYY -> DSL Method Type bitmap.
|
|
// ZZZZZZZZZZZZZZZ -> Rule short Index bitmap.
|
|
// TTTTTTTTT -> alternation alternative index bitmap
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.BITS_FOR_METHOD_TYPE = 4;
|
|
exports.BITS_FOR_OCCURRENCE_IDX = 8;
|
|
exports.BITS_FOR_RULE_IDX = 12;
|
|
// TODO: validation, this means that there may at most 2^8 --> 256 alternatives for an alternation.
|
|
exports.BITS_FOR_ALT_IDX = 8;
|
|
// short string used as part of mapping keys.
|
|
// being short improves the performance when composing KEYS for maps out of these
|
|
// The 5 - 8 bits (16 possible values, are reserved for the DSL method indices)
|
|
/* tslint:disable */
|
|
exports.OR_IDX = 1 << exports.BITS_FOR_OCCURRENCE_IDX;
|
|
exports.OPTION_IDX = 2 << exports.BITS_FOR_OCCURRENCE_IDX;
|
|
exports.MANY_IDX = 3 << exports.BITS_FOR_OCCURRENCE_IDX;
|
|
exports.AT_LEAST_ONE_IDX = 4 << exports.BITS_FOR_OCCURRENCE_IDX;
|
|
exports.MANY_SEP_IDX = 5 << exports.BITS_FOR_OCCURRENCE_IDX;
|
|
exports.AT_LEAST_ONE_SEP_IDX = 6 << exports.BITS_FOR_OCCURRENCE_IDX;
|
|
/* tslint:enable */
|
|
// this actually returns a number, but it is always used as a string (object prop key)
|
|
function getKeyForAutomaticLookahead(ruleIdx, dslMethodIdx, occurrence) {
|
|
/* tslint:disable */
|
|
return occurrence | dslMethodIdx | ruleIdx;
|
|
/* tslint:enable */
|
|
}
|
|
exports.getKeyForAutomaticLookahead = getKeyForAutomaticLookahead;
|
|
var BITS_START_FOR_ALT_IDX = 32 - exports.BITS_FOR_ALT_IDX;
|
|
function getKeyForAltIndex(ruleIdx, dslMethodIdx, occurrence, altIdx) {
|
|
/* tslint:disable */
|
|
// alternative indices are zero based, thus must always add one (turn on one bit) to guarantee uniqueness.
|
|
var altIdxBitMap = (altIdx + 1) << BITS_START_FOR_ALT_IDX;
|
|
return (getKeyForAutomaticLookahead(ruleIdx, dslMethodIdx, occurrence) |
|
|
altIdxBitMap);
|
|
/* tslint:enable */
|
|
}
|
|
exports.getKeyForAltIndex = getKeyForAltIndex;
|
|
//# sourceMappingURL=keys.js.map
|