Skip to content
/ webml Public
forked from KeenS/webml

A Standard ML Compiler for the Web

Notifications You must be signed in to change notification settings

fritexvz/webml

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

WebML -- A Standard ML compiler for the Web

Build Status

WebML is to be a Standard ML (SML '97) Compiler that works on web browsers and generates WebAssembly binaries. WebAssembly binaries can be run on web browsers. This means you can run SMl REPL on web browsers.

Status

Under very early stage of initial development. Compiles only minimal subset of SML codes. The garbage collector is not complete.

Implemented features

Core

  • Declaration
    • val
      • basic (val ident = expr)
      • pattern (val pat = expr)
      • tyvar val 'a pat = expr
      • typed (val pat : ty = expr)
      • and (val pat = expr and pat = expr)
    • fun
      • basic (fun ident ident ... = expr)
      • pattern (fun ident pat ... = expr)
      • multi-clause (fun ident pat ... = expr | ident pat ... = expr)
      • op (fun op ident pat ... = expr)
      • tyvar (fun 'a ident pat ... = expr)
      • typed (fun ident pat ... : ty = expr)
      • and (fun ident pat ... = expr and ident pat ... = expr)
    • type (type ident = ty)
    • datatype
      • datatype ident = Con of ty | Con ...
        • basic (datatype ident = Con of ty | Con ...)
        • tyvar (datatype 'a ident = Con of ty | Con ...)
        • and (datatype ident = Con | ... and ident = Con | ...)
        • withtype (datatype ident = Con ... withtype ..)
      • datatype ident = datatype ident
    • abstype
    • exception
    • local ... in ... end
    • open ..
    • decl ; decl
      • decl decl
      • decl ; decl
    • infix
    • infixr
    • nofix
  • Expressions
    • special constant
      • integer
      • real
        • 123.456
        • 123e456
        • 123E456
        • 123e~456
      • word
      • char
      • string
    • value identifier
    • op
    • record
      • basic ({ label = expr , ...})
      • tuple
      • 0-tuple
      • #label
    • list ([expr, ..., expr])
    • (expr; ...; expr)
    • paren ((expr))
    • let .. in .. end
      • basic (let decl ... in expr end)
      • derived (let decl ... in expr; ...; expr end)
    • function application
    • infix operator
      • L
      • R
    • typed (exp : ty)
    • exception
      • handle
      • raise
    • fn
      • basic (fn ident => expr)
      • pattern (fn pat => expr)
      • multi-clause fn pat => expr | pat => expr ...
    • andalso
    • orelse
    • if .. then .. else
    • while .. do ..
    • case .. of ..
  • Pattern
    • wildcard
    • special constant
      • integer
      • word
      • char
      • string
    • value identifier
    • op
    • record
      • basic ({ label = pat , ...})
      • wildcard (...)
      • label as variable ({ var (as pat), ...})
      • tuple
      • 0-tuple
    • list
    • paren
    • Constructor
    • infix
    • typed (pat : ty)
    • layerd (ident as pat)
  • Type
    • type variable
    • record
    • type construction
      • without param (ident)
      • with param (ty ident)
    • tuple
    • function
    • paren
  • Initial Basis
    • unit
    • bool
      • true
      • false
    • int
    • word
    • string
    • char
    • list
      • nil
      • ::
    • ref
      • ref
      • :=
    • exn
    • =
    • Match
    • Bind
  • Overloaded
    • +
    • -
    • *
    • div
    • mod
    • /
    • <
    • >
    • <=
    • >=
    • abs
    • ~

Module

not yet implemented

Program

  • Program
    • decl (decl decl ...)
    • expr (expr decl ...)
      • Note: toplevel expression expr should be treated as val it = expr

About

A Standard ML Compiler for the Web

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Rust 98.8%
  • Other 1.2%