def verify_first_follow(compiled_grammar)
      compiled_grammar.rules.each do |rule|
        rule.branches.each do |branch|
          has_epsilon = branch.first_set.find { |step| step.is_a?(Epsilon) }

          if has_epsilon and !branch.follow_set.empty?
            compiled_grammar.add_error(
              'first/follow conflict, branch can start with epsilon and is ' \
                'followed by (non) terminals',
              branch.source_line
            )

            compiled_grammar.add_error(
              'epsilon originates from here',
              has_epsilon.source_line
            )
          end
        end
      end
    end
def verify_first_follow(compiled_grammar)
      compiled_grammar.rules.each do |rule|
        rule.branches.each do |branch|
          has_epsilon = branch.first_set.find { |step| step.is_a?(Epsilon) }

          if has_epsilon and !branch.follow_set.empty?
            compiled_grammar.add_error(
              'first/follow conflict, branch can start with epsilon and is ' \
                'followed by (non) terminals',
              branch.source_line
            )

            compiled_grammar.add_error(
              'epsilon originates from here',
              has_epsilon.source_line
            )
          end
        end
      end
    end
Adds errors for any rules containing first/follow conflicts.

 @param [LL::CompiledGrammar] compiled_grammar