Files
coolguy 51f555a830 리졸버를 위한 자리: Node.bind 와 Map.clear
ast.Node 가 이름이 무엇으로 해석됐는지 들고, Map 이 저장소를 유지한 채 키만
잊는다. 스코프가 끝날 때 표를 다음 스코프에 넘기는 것이 리졸버가 원하는
모양이다 -- 함수마다가 아니라 중첩 단계마다 표 하나.

bind 는 Name 노드의 남는 a 필드를 재활용할 수도 있었지만 명시적인 쪽을 골랐다.
노드가 32 에서 36 바이트가 되는 값으로 그 자리가 무엇인지 이름이 말한다.

clear 는 아무도 부르지 않는 채로 들어와 있었다. maps.fe 가 이제 부른다: 키가
사라지고, 방은 64 로 남고, 그 위에 다시 채워도 버퍼를 새로 잡지 않는다.

  cleared 0 room 64 gone 0 / refilled 3 / balanced

GOAL.md 를 더했다. 외부 감사와, 그 항목들을 실제로 빌드해서 확인한 결과를
합친 P0~P4 다.

228/228, 32/32.
2026-08-17 15:50:58 +09:00
..

Ferro 로 쓴 Ferro 프런트엔드

셀프호스팅의 강제 함수. 언어가 자기 컴파일러를 쓸 만한지는 써 봐야 안다.

파일 무엇
tok.fe 토큰. 텍스트를 들지 않고 소스 안의 위치를 든다 (R4)
scan.fe 렉서. next(src, &mut at, &mut line)
main.fe 렉서 프로그램. 종류별로 세고 몇 개를 찍는다
ast.fe 노드. 자식은 노드 배열 안의 인덱스다
parse.fe 재귀 하강 파서. 토큰 하나를 앞서 본다
tree.fe 파서 프로그램. 식을 전위 표기로 다시 찍는다

전위 표기로 찍는 것이 요점이다. 1 + 2 * 3(+ 1 (* 2 3)) 로 나오는 것 말고는 우선순위가 맞았는지 볼 방법이 없다.