| Program Analysis via Graph Reachability 
Thomas Reps | 

[(e[])eee[e]] を解析し、構文木を書け。
L: matched → matched matched
           | ( matched )
           | [ matched ]
           | e
           | ε (空列)
  
while (true) {
    for e2,e2 in 隣りあったエッジ {
        if (規則 A → e2 e3 がある) {
            新しいエッジ A を追加。
        }
    }
    if (これ以上追加できない) { break; }
}


matched → matched matched
        | (i matched )i
        | e
        | ε
realizable → matched realizable
        | (i realizable
        | ε
 
e e (1 e
  e e (1 e e )1
  e e (1 e e )2
 
e e (1 e
    e e (1 e e )1
    e e (1 e e )2
    main から実際に呼ばれうる経路のみを考慮)
  

 
 

unbalanced-right → unbalanced-right matched
                 | unbalanced-right )i
                 | ε
slice → unbalanced-right realizable
 
printf i に到達する
| (nop) | x=nil; | z=cons(x,y); | x=y; | x=car(y); | x=cdr(y); | 
id_path → id_path id_path
        | hd id_path hd-1
        | tl id_path tl-1
        | id
        | ε
hd_path → id_path hd id_path tl_path → id_path tl id_path
 
empty
atom,empty)
   p=&q;   p=q;    p=*q;    *p=q;
malloc() はつねに同じアドレスを返すとする。
    p = malloc();
  → p = &malloc_s;
| p = &q; | assignAddr(p, q). | 
| p = q; | assign(p, q). | 
| p = *q; | assignStar(p, q). | 
| *p = q; | starAssign(p, q). | 

 
a = &b; d = &c; d = a; e = &a; *e = d; f = *e;

| → | 
| p = &q; | assignAddr(p, q). | assignAddr(q, p). | 
| p = q; | assign(p, q). | assign(q, p). | 
| p = *q; | assignStar(p, q). | assignStar(q, p). | 
| *p = q; | starAssign(p, q). | starAssign(q, p). | 
| pointsTo → assignAddr | 
| pointsTo → assignAddr | 
| pointsTo → assign pointsTo | 
| pointsTo → pointsTo assign | 
| pointsTo → assignStar pointsTo pointsTo | 
| pointsTo → pointsTo pointsTo assignStar | 
| pointsTo → pointsTo starAssign pointsTo | 
| pointsTo → pointsTo starAssign pointsTo | 
f が b および c を
指しうることを示せ。


| 新山の 研究テーマについて | 
f(X) {
    y ← +∞
    for each x in X {
        if x < y {
            y ← x
        }
    }
    return y
}
class Range {
  int vMin;
  int vMax;
}
f(int v) {
  a = v - vMax;
  b = vMin - v;
  return max(max(a, b), 0);
}