Syntax
-
<Exp> ::= <identifier> | ( <Exp> ) | <Exp> <Exp> | --application λ<identifier>.<Exp> --abstraction - -- Syntax of the λ-calculus --
Below is the syntax of a small programming language
based on
program ::= exp exp ::= ident | numeral | 'letter' | () | true | false | nil | ( exp ) | unopr exp | exp binopr exp | if exp then exp else exp | lambda param . exp | exp exp | let [rec] decs in exp decs ::= dec , decs | dec dec ::= ident = exp param ::= () | ident unopr ::= hd | tl | null | not | - binopr ::= and | or | = | <> | < | <= | > | >= | + | - | * | / | :: priorities: :: 1 cons list (right associative) or 2 and 3 = <> < <= > >= 4 scalars only + - 5 (binary -) * / 6 application 7 {left associative, f x y = (f(x))(y)} - hd tl null not 8 (unary -)
NB. The trivial value, ( ), is only present for syntactic compatibility with a strict (non-lazy) version of the language. There are interactive examples.