意味のないScheme:構文木としてのS式LISP
概要
[編集]YOYUにおける構文木は、意味(セマンティクス)を一切持たない純粋なS式構造として設計される。これはLISPの表記法に則りながらも、評価も型も一切持たず、ただ構文を写し取っただけの木構造である。このアプローチにより、構文木を構文木自身で記述し、書き換え、翻訳し、意味を与えていく段階的な処理系の構築が可能となる。
動機
[編集]一般的なLISP処理系では、構文木は即座に意味を持つ。たとえば (define x 10) は即座に x に 10 を束縛する評価対象である。しかしYOYUの構文木は違う。 (define x 10) はあくまで "defineという記号が先頭にある3つの要素からなるリスト" としてしか解釈されない。評価や型付けは構文木変換の後段に委ねられる。
S式構文木の例
[編集]たとえば次のようなコード:
(define (kuku)
())
は、まず構文木として次のように構成される:
(define (kuku) ())
これは次のように書き換えられる:
(define kuku (lambda () ()))
この書き換え(糖衣構文の展開)は、意味の解析ではなく単なる構文上の整理である。
YOYUにおける構文木設計の哲学
[編集]意味をあとから与える:構文木そのものには意味はなく、後段で意味を注入する。
書き換え可能な構文グラフ:S式で記述された構文木は容易に書き換え可能。
Schemeに似せる:評価や型の意味を持たないにも関わらず、見た目はSchemeに近づけることで親和性を高める。
Cons構造の最小構成:car/cdrによって構文木を構成するため、データ構造のミニマルさを維持。
応用と今後の展望
[編集]この構文木は、評価器を持たないLISP、すなわち"意味のないScheme"としてYOYU内部で中間表現として使用される。構文木変換、マクロ展開、意味解析、型推論などをこの上に段階的に重ねていくことで、自由度の高い処理系を実現できる。将来的にはこの構文木自身によって構文木処理を書く、いわば"構文木による自己実装"も視野に入る。
結論
[編集]意味を持たないS式構文木は、柔軟な記述と後段での自由な意味づけを可能にし、YOYUのような実験的かつ最小構成主義の処理系に極めて適している。LISPの形をしていながら意味を持たない"幽霊のようなScheme"、それがYOYUにおける構文木である。