コンテンツにスキップ

構文木を構文木で書き換える:YOYUにおける自己記述的中間表現

提供: ウィキバーシティ


概要

[編集]

YOYUは、構文解析インフラを自作するプロジェクトであり、Consセルベースのデータ構造やGCなしのメモリ管理、UTF-8デコーダ、構文クラス化など独自の機構を備える。その中で「構文木を構文木で書き換える」思想は、Scheme的な自己言語実装とは異なる形で、YOYUの中核となる言語的自己記述性を支えている。

構文木を構文木で変換するということ

[編集]

構文木の変換とは、抽象構文木(AST)を複数段階に分けて変形し、意味の縮約と構造の単純化を経て最終的なコード生成につなげるプロセスである。たとえば:

(for init cond update body)

は、まずC的for文ノードとして構文解析され、次にマクロ的処理で以下のような形に展開される:

(let (...) (if cond (begin body update ...)))

この変換は、構文木が自らの表現形式を変化させる能力を持っていることを意味し、YOYUにおいて構文木が第一級市民であることを象徴している。

YOYUにおけるマクロ変換パス

[編集]

YOYUでは、構文木変換の各ステージをマクロ変換パスとして独立に定義できる。これはSchemeのマクロと似ているが、より低水準かつ意図的に段階分離されている。C的構文とLISP的構文を混在させることすら可能であり、for文とlet文のように相互変換が行われる。

SchemeはSchemeで書かれる、ではYOYUは?

[編集]

Scheme処理系の伝統では、Cで最低限のランタイムを構築した後、自身の言語で処理系を再実装する、いわゆるbootstrappingが美学とされている。対してYOYUでは、C言語によるベース部分の構築を前提としつつ、その上に「構文木による構文木の自己変換」システムを重ねるという設計哲学を取っている。

可変中間表現としての構文木

[編集]

YOYUの構文木は、S式によって表現されつつも、具体的な意味や構造は変換フェーズに依存する。これはコンパイラ内部で使われる中間表現に似ているが、より柔軟であり、任意の段階で読み書き・分析・再構築が可能である。

結論

[編集]

YOYUは、Schemeのように自己記述的でありながら、LISPの文法やGCに依存せずに独自の表現力を持つ。その中で「構文木を構文木で書き換える」設計は、構文と意味の分離、段階的最適化、中間表現の透明性という三要素を兼ね備えており、独立したコンパイラ哲学を体現している。

参考文献

[編集]

YOYUにおけるスコープとクロージャの統一モデル

型付きLISPの再評価:ソース言語ではなく中間表現として