main main.dats
 1#include "share/atspre_staload.hats"
 2staload "libats/libc/SATS/stdio.sats"
 3staload "libats/SATS/stringbuf.sats"
 4staload "libats/DATS/stringbuf.dats"
 5staload "scan.sats"
 6staload "parse.sats"
 7
 8implement main0 () = 
 9let
10    val manifest = fileref_open_exn("build.ninja", file_mode_r)
11    (* initialize the scanner *)
12    var s: scanner = @{
13        file = manifest,
14        buf  = stringbuf_make_nil(i2sz(64)),
15        cur  = fgetc0(manifest),
16        line = 1,
17        col  = 1 }
18    val result = parse(s, nil_vt(), nil_vt(), nil_vt())
19in
20    printrule(result.rules);
21    manifest_free(result);
22    let 
23        val @{file = _, buf = buf, cur = _, line = _, col = _} = s 
24    in
25        stringbuf_free(buf)
26    end;
27    fileref_close(manifest)
28end