# File Reduktion.rb, line 191
def reduce(baum)
        if baum != nil && baum.is_a?(Nonterminal)
                # Fall 1: Kettenproduktion und ...
                if baum.getSoehne().size == 1
                        # Fall 1a: ... es liegt ein Nonterminal vor -> kann "reduziert" werden
                        if baum.getSoehne()[0].is_a?(Nonterminal)
                                name = baum.getName()
                                baum.setSoehne(baum.getSoehne()[0].getSoehne())
                                baum.getSoehne().each do |sohn|
                                        sohn.setVater(baum)
                                        sohn.setName(name)
                                end
                                reduce(baum)
                        # Fall 1b: ... es liegt ein Terminal vor -> nichts zu tun
                        end
                # Fall 2: keine Kettenproduktion
                else
                        baum.getSoehne().each do |sohn|
                                reduce(sohn)
                        end
                end
        end
end