- spreadsheet_types.ts · spreadsheet_view_types.ts — 문서 · 칸 · 서식 · 수식 나무 · 값 · 명령 · 계산 엔진 · 화면 문맥 계약 - 머리 주석에 파일 · 주인(A~F) · 예산 줄 수 · 크기 예산(gzip 54 KB) · 규칙(외부 라이브러리 0 · M02 만 늦게 불러옴) - A · B 엔진 · C 격자 · D 진입 · E 도구 공개 함수 머리(빈 몸) - spreadsheet_sample.json — basis/<열 id>.json 한 벌 견본(병합 · 서식 · 다른 시트 참조 · 숨김 · 계산값) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0168FQuoV7vDh5nhnSowW5cp
30 lines
1.4 KiB
TypeScript
30 lines
1.4 KiB
TypeScript
/* =============================================================================
|
|
* 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();
|
|
}
|