# 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