~/cstml/documents/space
The language.
Table of Contents
A declarative, statically typed, stack programing language. Inspired by the FMC, FMCt, and Forth.
Language Syntax
NB: This page is marked as WIP
The syntax of space is simple:
TERM ::= *
| VARIABLE ; TERM
| @LOCATION [TERM] ; TERM
| @LOCATION <VARIABLE : TYPE> ; TERM
VARIABLE ::= <lower case letter>
LOCATION ::= @ <upper case letter>+ <lower case letter>*
TYPE ::= <upper case letter>+ <lower case letter>*
The language also accommodates nested comments, in the same style as Haskell:
-- Line comments are lines preppended with --
{- Multi-line nested comments {- as can be seen here -} are of this
form. -}
Example Terms
x;* -- is simply calling variable x x;y;* -- is calling variable x and then y [x;*];* -- pushses a call to variable x to the default/"Home" stack [x;*];<y>;* -- pushes a call to variable x to the default stack and then binds this command to variable y
eval(x) = eval(eval(x))
Types Syntax
There are two levels of types: values and types.
Any type is a set of Values or Constructors.
() :: ()
1 :: Z
^() :: {} -> ({1})@
^1 :: {} -> ({Z})@
^1;^2 :: {} -> ({Z;Z})@
+ :: ({Z;Z})@ -> {}
[*];<x>;eval ::
Notation
T ::= {}
| TYPEVAR ; T
| Z ; T
| Ch ; T
| 5.{T} ; T
| [T -> T] ; T
| (T)@LOCATION ; T
Examples
xZ({} -> Z)@{} -> ({} -> Z)@
Z :: {} => gamma@[{} => Z]
1 :: {} => gamma@[{} => Z]