UNPKG

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
'use strict'; 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 };