# File Grammatiken.rb, line 354 def epsilon_Symbole res = Array.new #Es müssen alle Regeln durchsucht werden, ob sie zu epsilon werden # Solange Epsilon Produktionen vorhanden sind, eine Schleife durchlaufen, # die nach epsilon-Regeln sucht keine_epsilon = false while !keine_epsilon keine_epsilon = true # Suchen, ob noch eine Epsilon-Ableitung vorhanden is @rules.each_pair {|name,rule| # Nachschauen ob jede Regel zu Epsilon wird if (rule.isEpsilon) res.include?(name) ? () : (res.push(name);keine_epsilon = false) #end else # Nach schauen ob eine Alternative sich NUR aus den Symbolen zusmmenstellen # lässt, die sich zu Epsilon ableiten lassen rule.getAlts.each {|alt| abbruch =false # Eine Alternative dann Epsilon, wenn sie nur aus NonTerminalen besteht, # die zu epsilon werden alt.getSymbols.each{ |symb| res.include?(symb) ? () : (abbruch = true;) } if !abbruch res.include?(name) ? () : (res.push(name); keine_epsilon = false) end } # # end } # end # return res end