stream-token-parser
Version:
Token parser designed based on stream property. Accept chunk string and parse it into tokens simultaneously. [readme-lang:zh]基于流特性设计的token解析器,接受一个chunk的字符串,同时解析成tokens。
62 lines (49 loc) • 1.41 kB
JavaScript
;
let {
WAIT, MATCH
} = require('./const');
let {
assembleToken
} = require('./util');
let filterTypes = (nextLetter, prefix, tokenTypes) => {
let parts = [],
matchs = [],
independentType = null;
let len = tokenTypes.length;
for (let i = 0; i < len; i++) {
let tokenType = tokenTypes[i];
let ret = tokenType.match(prefix, nextLetter);
if (ret === WAIT) {
parts.push(tokenType);
} else if (ret === MATCH) { // matched
matchs.push(tokenType);
parts.push(tokenType);
if (!independentType && tokenType.independent) {
independentType = tokenType;
}
}
}
return [parts, matchs, independentType];
};
let findToken = (retMatrix) => {
let prev = null;
for (let i = 0; i < retMatrix.length; i++) {
let {
prefix, matchTypes
} = retMatrix[i];
for (let j = 0; j < matchTypes.length; j++) {
let tokenType = matchTypes[j];
if (!prev ||
tokenType.priority > prev.tokenType.priority ||
(tokenType.priority === prev.tokenType.priority && prefix.length > prev.text.length)
) {
prev = assembleToken(tokenType, prefix);
}
}
}
return prev;
};
module.exports = {
findToken,
filterTypes
};