跳到主要内容

有限状态机

有限状态机(FSM finite state machine) 每一个状态都是一个机器,每个机器都可以接收输入和计算输出。机器本身没有状态,每一个机器会根据输入决定下一个状态

语法


let NumberReg = /[0-9]/;
const Numeric = "Numeric";
const Punctuator = "Punctuator";
let tokens = [];
let currentToken;

function emit(token) {
currentToken = { type: "", value: "" };
tokens.push(token);
}
function start(char) {
if (NumberReg.test(char)) {
currentToken = { type: Numeric, value: "" };
}
return number(char);
}
function number(char) {
if (NumberReg.test(char)) {
currentToken.value += char;
return number;
} else if (char === "+" || char === "-") {
emit(currentToken);
emit({ type: Punctuator, value: char });
currentToken = { type: Numeric, value: "" };
return number;
}
}

function tokenizer(input) {
let state = start;
for (let char of input) {
state = state(char);
}
if (currentToken.value.length > 0) {
emit(currentToken);
}
}
tokenizer("10+20+30-10");
console.log(tokens);