R → Q R' (1)
R' → ε | '|' Q R' (2)
Q → P Q' (3)
Q' → ε | P Q' (4)
P → O P' (5)
P' → ε | '*' P' (6)
O → '(' R ')' | ALPHA (7)
に対する構文解析表をつくる。
まず、
First(O) = { '(', ALPHA}
First(P) = First(O)
First(Q) = First(P)
より、
First(Q R') = First(Q) (First(Q)がεを含まないので)
= { '(', ALPHA}
ゆえに下の構文解析表の Rの行の
*1の欄を得る。
First('|' Q R') = { '|' }
だから*2の欄を得る。
さらに、First(ε) = {ε}だから、
Follow(R')を考える必要がある。
Follow(R') = Follow(R) = { $, ')' }
より、 *3の欄を得る。
First(P Q') = First(P)(First(P)がεを含まないので)
= { '(', ALPHA }
より、 *4の欄を得る。
Follow(Q') = Follow(Q)
= First(R')(εを除く) + Follow(R')+ Follow(R)
= { '|' } + Follow(R) = { '|', ')', $ }
より、 *6の欄を得る。
First(O P') = First(O)(First(O)がεを含まないので)
= { '(', ALPHA }
より、 *7の欄を得る。
Follow(P') = Follow(P)
= First(Q')(εを除く) + Follow(Q') + Follow(Q)
= { '(', ALPHA } + { '|', ')', $ }
= { '(', ALPHA, '|', ')', $ }
より *9の欄を得る。
| | | * | ( | ) | ALPHA | $ | |
| R | Q R' *1 | Q R' *1 | ||||
| R' | '|' Q R' *2 | ε *3 | ε *3 | |||
| Q | P Q' *4 | P Q' *4 | ||||
| Q' | ε *6 | P Q' *5 | ε *6 | P Q' *5 | ε *6 | |
| P | O P' *7 | O P' *7 | ||||
| P' | ε *9 | '*' P' *8 | ε *9 | ε *9 | ε *9 | ε *9 |
| O | '(' R ')' | ALPHA |