## ahead集合の作成 1つのノードに対し[head集合](16.head集合の作成.md)を元に空規則が還元した後に続くhead集合を集約する。これをahead集合とする。 還元規則の判定に[nullable集合](15.nullable集合の作成.md)を使用する。 ``` start : . avoid bvoid | . avoid 'C' | . bvoid 'D' | . 'X' avoid : . 'A' | . bvoid : . 'B' | . ↓ avoidのahead集合は 'B'、'C' となる bvoidのahead集合は 'D' となる ``` ahead集合の作成は次の疑似コードで表す。 ``` reduceable = 空規則を抽出 foreach (look in 次の記号がreduceableに含まれる行) top = lookの左辺 foreach (x in lookの次の要素から) if (xが終端記号) topのahead集合にxを追加 else topのahead集合にtopのhead集合を追加 if (xがnullable集合に含まれなければ) break ```