main parse.sats
 1staload "scan.sats"
 2
 3vtypedef binding = @{
 4     key   = Strptr1, 
 5     value = List0_vt(stringpart)
 6}
 7
 8vtypedef rule = @{
 9     name     = Strptr1,
10     bindings = List0_vt(binding)
11}
12
13vtypedef edge = @{
14    output    = List1_vt(Strptr1),
15    rule      = Strptr1,
16    input     = List0_vt(Strptr1),
17    bindings  = List0_vt(binding)
18}
19
20vtypedef manifest = @{
21    rules     = List0_vt(rule),
22    edges     = List0_vt(edge),
23    variables = List0_vt(binding)
24}
25
26fun manifest_free(m: manifest): void 
27fun printrule(rules: !List0_vt(rule)): void
28fun parse(s: &scanner, rules: List0_vt(rule), edges: List0_vt(edge), variables: List0_vt(binding)): manifest
29