 
strict digraph faustflow {
    root=syntax;
    ordering=out;
      
    declaration[label="3.2.1 Declarations"];
  	fileimport[label="3.2.2 File Imports"];
	documentation[label="3.2.3 Documentation"];

    simple[label="3.3.1 Simple"];
    fundef[label="3.3.2 Function"];
    patdef[label="3.3.3 Pattern"];
    
    diag[label="3.4.1 Diag."];
    math[label="3.4.2.1 Math"];
    bit[label="3.4.2.2 Bitwise"];
    cmp[label="3.4.2.3 Compare"];
    
    time[label="3.4.3 Time"];
    env[label="3.4.4 Lexical"];
    foreign[label="3.4.5 Foreign"];
    prog[label="3.4.6 Lambda"];

    infix[label="3.4.2 Infix"];


    node[shape=box, color=blue, fillcolor=lightblue, style=filled];
    program[label="3.1 Program"];
    statement[label="3.2 Statements"];
    definition[label="3.3 Definitions"];
    expr[label="3.4 Expressions"];
    prim[label="3.5 Primitives"];
  

    program->statement;
    statement->declaration;
    statement->fileimport;
    statement->definition;
    statement->documentation;
     
    definition->simple->expr;
    definition->fundef->expr;
    definition->patdef->expr;

    expr->diag;		
    expr->infix;
    
    infix->math->prim;
    infix->bit->prim;
    infix->cmp->prim;

    expr->time;
    expr->env;
    expr->foreign;
    expr->prog;
    
}
