title: What is the rationale for the third rule of the follow set algorithm?
body: <p>For a compilers class, we were presented with the following rules for finding the FOLLOW(A):</p>
  
  <p>&alpha;</p>
  
  <ol>
  <li>If A is the start symbol, add '$' to FOLLOW(A)</li>
  <li>If A -> &alpha; B &beta;, add FIRST(&beta;) - {&epsilon;} to FOLLOW(B)</li>
  <li>If A -> &alpha; B, or ( A -> &alpha; B &beta; and &beta; *-> <img src="https://latex.codecogs.com/gif.latex?%5Cepsilon" title="\epsilon" /> ), add FOLLOW(A) to FOLLOW(B).</li>
  </ol>
  
  <p>We were also given the informal definition of the Follow(A):
  The set of terminals which can immediately follow A in a sentential form.</p>
  
  <p>Why is the third rule true?</p>
  
  <p>I understand how to apply the third rule, but I'm confused about why it must be the case.  Could anyone provide a concrete example that requires its use, or an example which would fail the informal definition in absence of the third rule?</p>