跳到主要内容

tokenize.js

let RegExpObject = /(-?[0-9]+)|(\+)|(\*)|(\-)|(\/)|(\()|(\))/g;
const tokenTypes = require("./tokenTypes");
const TokenReader = require("./tokenReader");
const tokenNames = [
tokenTypes.Number,
tokenTypes.Plus,
tokenTypes.Multiply,
tokenTypes.Minus,
tokenTypes.Divide,
tokenTypes.LeftPara,
tokenTypes.RightPara,
];

function* tokenizer(script) {
let result;
while (true) {
result = RegExpObject.exec(script);
if (!result) {
break;
}
let index = result.findIndex((item, index) => index > 0 && !!item);
let token = { type: tokenNames[index - 1], value: result[0] };
yield token;
}
}
function tokenize(script) {
const tokens = [];
for (let token of tokenizer(script)) {
tokens.push(token);
}
return new TokenReader(tokens);
}

module.exports = tokenize;