Module scmi_types

May 12, 2014 ยท View on GitHub

Scheme interpreter types (for Erlang types and specs)

. __Authors:__ Joseph Wayne Norton ([`norton@alum.mit.edu`](mailto:norton@alum.mit.edu)).

Data Types

arg()


arg() = exp()

body()


body() = dexec()

denv()


denv() = scmi_env:env()

dexec()


dexec() = fun((denv(), dok(), dng()) -> exp())

dng()


dng() = fun((exp()) -> no_return())

dok()


dok() = fun((exp(), dng()) -> exp())

eof()


eof() = '?EOF'
?EOF

error()


error() = error_user() | error_read() | error_file()

error_file()


error_file() = #error_file{val = exp()}

error_read()


error_read() = #error_read{val = exp()}

error_user()


error_user() = #error_user{val = [exp(), ...]}

exception()


exception() = #exception{val = [signal()]} | #cexception{val = [signal()]}

exp()


exp() = scm_any()

expander()


expander() = #expander{val = sexec()}

f()


f() = f0() | fn() | fv() | fnv()

f0()


f0() = fun(() -> exp())

fn()


fn() = fun((...) -> exp())
fun((arg(),...) -> exp()).

fnv()


fnv() = fun((...) -> exp())
fun((arg(),...,vargs()) -> exp()).

fv()


fv() = fun((vargs()) -> exp())

iodev()


iodev() = scmi_iodev:iodev()

l()


l() = l0() | ln() | lv() | lnv()

l0()


l0() = #l0{body = body(), env = denv(), src = src()}

lip()


lip() = lip0() | lipn() | lipv() | lipnv()

lip0()


lip0() = #lip0{val = l0()}

lipn()


lipn() = #lipn{val = ln() | [ln()]}

lipnv()


lipnv() = #lipnv{val = lnv()}

lipv()


lipv() = #lipv{val = lv()}

ln()


ln() = #ln{params = params(), body = body(), env = denv(), src = src()}

lnv()


lnv() = #lnv{n = pos_integer(), params = params(), body = body(), env = denv(), src = src()}

lv()


lv() = #lv{param = param(), body = body(), env = denv(), src = src()}

nip()


nip() = nip0() | nipn() | nipv() | nipnv()

nip0()


nip0() = #nip0{val = f0()}

nipn()


nipn() = #nipn{val = fn() | [fn()]}

nipnv()


nipnv() = #nipnv{val = fnv()}

nipv()


nipv() = #nipv{val = fv()}

param()


param() = var()

params()


params() = [param()]

proc()


proc() = nip() | xnip() | lip()

senv()


senv() = scmi_analyze:senv()

sexec()


sexec() = fun((exp(), senv()) -> expander() | dexec())

signal()


signal() = #signal{obj = exp(), env = denv(), ok = dok(), ng = dng()}

src()


src() = fun(() -> [exp()])

thunk()


thunk() = nip0() | xnip0() | lip0()

var()


var() = scm_symbol() | reference()

vargs()


vargs() = [arg()]

xf()


xf() = xf0() | xfn() | xfv() | xfnv()

xf0()


xf0() = fun((denv(), dok(), dng()) -> exp())

xfn()


xfn() = fun((...) -> exp())
fun((arg(),... ,denv(), dok(), dng()) -> exp()).

xfnv()


xfnv() = fun((...) -> exp())
fun((arg(),... ,vargs(), denv(), dok(), dng()) -> exp()).

xfv()


xfv() = fun((vargs(), denv(), dok(), dng()) -> exp())

xnip()


xnip() = xnip0() | xnipn() | xnipv() | xnipnv()

xnip0()


xnip0() = #xnip0{val = xf0()}

xnipn()


xnipn() = #xnipn{val = xfn() | [xfn()]}

xnipnv()


xnipnv() = #xnipnv{val = xfnv()}

xnipv()


xnipv() = #xnipv{val = xfv()}