Skip to main content
Latest
File
import { Tokens } from "./Tokens.ts";
export function tokenize(s: string): Tokens { const tokens: Tokens = []; const stack: Tokens[] = [tokens]; for (let i = 0; i < s.length; i++) { const value = s[i]; if (/\d/.test(value)) { //只处理整数 const digits: string[] = [value];
while (/\d/.test(s[i + 1])) { digits.push(s[i + 1]); i++; }
const num = Number(digits.join("")); stack[stack.length - 1].push(num); } if (["+", "-", "/", "*"].includes(value)) { stack[stack.length - 1].push(value); } if (value === "(") { stack.push([]); } if (value === ")") { if (stack.length <= 0) throw Error("parentheses mismatch"); const last = stack[stack.length - 1]; stack.pop(); stack[stack.length - 1].push(last); } } if (stack.length !== 1) throw Error("parentheses mismatch"); return tokens;}