Skip to content

マクロの実装 #1

@nojima

Description

@nojima

define-syntax を実装する。

設計

  1. パースのマクロの展開を同時に行う。
    • R5RS では、define-syntax はトップレベルにしか置けないという制約があるので、パース前に define-syntax を拾ってきて解釈することもできるが、R7RS ではトップレベル以外にも置くことができ、場所によってマクロのスコープが変わる。R7RS に将来的に対応することを視野に入れると、パースと同時にマクロを展開したほうがよい。
  2. マクロを表すクラス Transformer を作る。
    • define-syntax ひとつに対して Transformer ひとつが対応する。
    • Transformer は書き換えルールを内部に保持し、与えられた S 式をルールによって変換することができる。
  3. グローバルな Transformer は実行時も保持する。
    • eval のため。
    • GC の対象にはしなくてよい。

Metadata

Metadata

Assignees

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions