Semantic Model (part 4) For the dependency/action tree, we will define an auxiliary Ocaml recursive datatype: type file = string type actions = string list type rule = Rule of (file * rule list * actions) Example Makefile Fragment: lisp.o: lisp.c gcc -c $< emacs: emacs.c lisp.o buffer.h gcc -o $@ emacs.c lisp.o Becomes Ocaml Value: Rule ("emacs", [ Rule ("emacs.c", [], []); Rule ("lisp.o", [ Rule ("lisp.c", [], []) ], [ "gcc -c lisp.c" ] ); Rule ("buffer.h", [] []); ], [ "gcc -o emacs emacs.c lisp.o" ] )