
12

WebML: A Standard ML Compiler for the Web
source link: https://github.com/KeenS/webml
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

WebML -- A Standard ML compiler for the Web
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
)
-
basic (
-
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
)
-
basic (
-
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 ..
)
-
basic (
-
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
-
basic (
-
list (
[expr, ..., expr]
) -
(expr; ...; expr)
-
paren (
(expr)
) -
let .. in .. end
-
basic (
let decl ... in expr end
) -
derived (
let decl ... in expr; ...; expr end
)
-
basic (
- 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 ...
-
basic (
-
andalso
-
orelse
-
if .. then .. else
-
while .. do ..
-
case .. of ..
-
special constant
-
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
-
basic (
- list
- paren
- Constructor
- infix
-
typed (
pat : ty
) -
layerd (
ident as pat
)
-
Type
- type variable
- record
-
type construction
-
without param (
ident
) -
with param (
ty ident
)
-
without param (
- 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 asval it = expr
-
Note: toplevel expression
-
decl (
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK