/* ============================================================================= * spreadsheet_parser.ts (주인 A) * 수식 글 → 낱말 · 나무 · 나무 → 글. `eval` 금지 — 직접 짠 파서만. * 우선순위는 엑셀과 같음: 범위 `:` > 부호 `-` `+` > `%` > `^` > `* /` > `+ -` > `&` > 비교 * (부호가 `^` 보다 먼저 — `-2^2 = 4`). 같은 단은 왼쪽부터(`^` 도 왼쪽부터 · 엑셀과 같음). * 글 `"…"` 안 `""` = 따옴표 하나 · 시트 `'이름'!A1` · `이름!A1` · 오류 값 글자 · TRUE/FALSE. * 0 계약 머리 — 몸은 A 가 채움. * ========================================================================== */ import type { FormulaNode, ParseResult, Token } from "./spreadsheet_types"; const todo = (): never => { throw new Error("spreadsheet_parser: 아직 없음(A)"); }; /** 앞 `=` 뺀 식 글 → 낱말(빈칸 낱말 포함 · 끝까지 · 못 읽는 글은 `unknown`) — 편집기 색칠 · 가리키기용 */ export function tokenize(_formula: string): Token[] { return todo(); } /** 앞 `=` 뺀 식 글 → 나무. 앞에 `=` 가 붙어 와도 됨. 함수 이름은 대문자로. */ export function parseFormula(_formula: string): ParseResult { return todo(); } /** 나무 → 앞 `=` 뺀 식 글(참조 옮김 뒤 다시 적기) — 수는 원래 글(`text`) 그대로 */ export function formulaToText(_node: FormulaNode): string { return todo(); }