anchor.diff:      ast.alloc(state);
     }
     bool isAnchored() => min > 0 && ast.isAnchored();
  +  int get minWidth {
  +    if (min == 0) return 0;
  +    return super.minWidth;
  +  }
  +  int get maxWidth {
  +    if (max == null) {
  +      if (super.maxWidth == 0) return 0;
  +      return null;
  +    }
  +    int w = super.maxWidth;
  +    if (w == null) return null;
  +    return max * w;
  +  }
   }
   
   class Parser {
  
positive.code: abstract class BinaryAst extends Ast {
    BinaryAst(this.l, this.r);
    Ast l, r;
  
    void dump() {
      super.dump();
  
negative.code: abstract class Ast {
    static int ctr = 0;
    String name = "f${ctr++}";
    int get minWidth;
    int get maxWidth;
  
    // Prints the dot-file (graphviz) output for each AST node.
    void dump() {
  