nanopass / nanopass-framework-racket

nanopass compiler framework for Racket

Home Page:http://nanopass.org

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

nanopass doesn't (accept|work with) syntax objects

dented42 opened this issue · comments

Syntax objects in Racket have lots of lovely properties, it would be nice at some point for nanopass to be able to parse syntax objects.

Another goal that seems like a nice thing to have would be to have passes themselves be able to preserve the syntax scope and location information that syntax objects use throughout compilation. This would let the final compiled result be a syntax object that knows it's history.

I'm unsure how out-of-scope such a goal is with regards to the current road map. It does, however, seem to me like the following should, at some point in the future, work.

#lang nanopass

(define (nat-zero? x)
  (eq? x 'Z))

(define-language nats
  (terminals
   [nat-zero (Z)])
  (Nat (nat)
       Z
       (S nat)))

(define-parser parse-nats nats)

(parse-nats 'Z)
(parse-nats '(S (S Z)))

(parse-nats #'Z)
(parse-nats #'(S (S Z)))

Does the take into account and preserve source location information? I can't quite tell from reading it.