The document summarizes a seminar presentation on using directed acyclic graphs (DAGs) to represent and optimize basic blocks in compiler design. DAGs can be constructed from three-address code to identify common subexpressions and eliminate redundant computations. Rules for DAG construction include creating a node only if it does not already exist, representing identifiers as leaf nodes and operators as interior nodes. DAGs allow optimizations like common subexpression elimination and dead code elimination to improve performance of local optimizations on basic blocks. Examples show how DAGs identify common subexpressions and avoid recomputing the same values.