// 임시 구문 스캐너 — 괄호·템플릿 리터럴 균형 줄 단위 추적 import fs from "node:fs"; const src = fs.readFileSync(process.argv[2], "utf8"); let inTpl = false, inStr = null, inInterp = 0, line = 1; const stack = []; const push = (t) => stack.push(t + "@" + line); for (let i = 0; i < src.length; i++) { const c = src[i], n = src[i + 1]; if (c === "\n") line++; if (inStr) { if (c === "\\") { i++; continue; } if (c === inStr) inStr = null; continue; } if (inTpl) { if (c === "\\") { i++; continue; } if (c === "$" && n === "{") { push("${"); inInterp++; i++; continue; } if (c === "`") { inTpl = false; const m = stack.pop(); } continue; } if (c === "`") { inTpl = true; push("tpl"); continue; } if (c === "'" || c === '"') { inStr = c; continue; } if (c === "/" && n === "/") { while (i < src.length && src[i] !== "\n") i++; continue; } if (c === "(" || c === "[" || c === "{") push(c); else if (c === ")" || c === "]" || c === "}") { const m = stack.pop(); if (!m) { console.log("여분의 닫기", c, "줄", line); process.exit(0); } } } console.log("미닫힘:", stack.slice(-8).join(", ") || "없음");