lambda_mountain 1.12.1

Lambda Mountain
Documentation


type AST ASTEOF | ASTNil | (App( AST[] , AST[] )) | (Var( String )) | (Lit( String )) | (Abs( AST[] , AST[] ))
                | (Seq( AST[] , AST[] )) | (Glb( String , AST[] )) | (ASTType( AST[] , AST[] )) | (Fragment( AST[] , AST[] ));

ast-tokenized-program := (: SNil S);
ast-parsed-program := (: ASTEOF AST);

non-zero := λ(: t AST). (: (tail(
   (let r 1_u64)
   (match t (
      ()
      ( ASTEOF (set r 0_u64))
      ( _ () )
   ))
   r
)) U64);

close := λ(: x AST). (: (tail(
   (mov( (malloc(sizeof AST)) R8 ))
   (mov( x 0_u64 (as R8 AST[]) ))
   (as R8 AST[])
)) AST[]);

print := λ(: t AST). (: (tail(
   (match t (
      ()
      ( ASTEOF (print 'EOF_s) )
      ( ASTNil (print '\[\]_s) )
      ( (Var a) (print a) )
      ( (Lit a) (tail( (print '\`_s) (print a) )))
      ( (ASTType( lhs rhs )) (tail(
         (print 'type\s_s)
         (print lhs)
         (print '\s=\s_s)
         (print rhs)
      )))
      ( (Glb( k v )) (tail(
         (print k)
         (print '\s:=\s_s)
         (print v)
      )))
      ( (Fragment( k v )) (tail(
         (print 'fragment\s_s)
         (print k)
         (print '\s:=\s_s)
         (print v)
      )))
      ( (App( l r )) (tail(
         (print '\[_s)
         (print l)
         (print '\s_s)
         (print r)
         (print '\]_s)
      )))
      ( (Abs( lhs rhs )) (tail(
         (print '\[_s)
         (print '\l_s)
         (print lhs)
         (print '._s)
         (print rhs)
         (print '\]_s)
      )))
      ( (Seq( l r )) (tail(
         (print l)
         (print '\:\n_s)
         (print r)
      )))
   ))
   ()
)) Nil);

serialize-ast := λ(: t AST). (: (tail(
   (match t (
      ()
      ( ASTEOF (print '\[\]_s) )
      ( ASTNil (print 'Nil_s) )
      ( (Var a) (tail(
         (print '\[Variable\s_s)
         (print a)
         (print '\]_s)
      )))
      ( (Lit a) (tail(
         (print '\[Literal\s_s)
         (print a)
         (print '\]_s)
      )))
      ( (ASTType( lhs rhs )) (tail(
         (print '\[Type\s\[_s)
         (serialize-ast lhs)
         (print '\s_s)
         (serialize-ast rhs)
         (print '\]\]_s)
      )))
      ( (Glb( lhs rhs )) (tail(
         (print '\[Global\s\[_s)
         (print lhs)
         (print '\s_s)
         (serialize-ast rhs)
         (print '\]\]_s)
      )))
      ( (Fragment( lhs rhs )) (tail(
         (print '\[Fragment\s\[_s)
         (serialize-ast lhs)
         (print '\s_s)
         (serialize-ast rhs)
         (print '\]\]_s)
      )))
      ( (App( lhs rhs )) (tail(
         (print '\[App\s\[_s)
         (serialize-ast lhs)
         (print '\s_s)
         (serialize-ast rhs)
         (print '\]\]_s)
      )))
      ( (Abs( lhs rhs )) (tail(
         (print '\[Lambda\s\[_s)
         (serialize-ast lhs)
         (print '\s_s)
         (serialize-ast rhs)
         (print '\]\]_s)
      )))
      ( (Seq( ASTEOF r )) (tail(
         (serialize-ast r)
         (print '\n_s)
      )))
      ( (Seq( l r )) (tail(
         (serialize-ast l)
         (serialize-ast r)
         (print '\n_s)
      )))
   ))
   ()
)) Nil);