<repo_name>ilkinzeynalli/ruby<file_sep>/veri_yapilari_odev.rb
ruby
====
#Stack veri yapisinin tanimi]
#LUtfen Html_orneklerini girdiginizde turkce karakter kullanmayin.Yok USC2 hatasi alirsiniz
class Stack
	  def initialize
	    @store = Array.new
	  end
	  
	  def pop
	    return(@store.pop())
	  end
	  
	  def push(element)
	    @store.push(element)
	    self
	  end
	  
	  def size
	    return (@store.length())
	  end
 
	  def isEmpty?
	    return @store == Array.new
	  end
end
 
 
 
 
#Dosyamizdaki fonksiyonlarin filtirlenmes
def html_filtirle()
	html_metni = File.open("html_ornek.html","r") do |dosya|
		satirlar = dosya.readlines
	end
 
 
	html_metni = html_metni.join().to_s
 
 
	duzenli_ifade = /(<.+?>)/ 
	eslesme = html_metni.scan(duzenli_ifade)
 
	filtir = []
 
	eslesme.each do |filt|
		filtir.push(filt)
	end
	
	puts("Html dosyasindaki taglarin filtirlenmis hali")
	
	filtir = filtir.join(" ").split(" ")
	
	dizi = []
	filtir.each do |eleman|
	    if eleman.match(/<[^\/]+?>/) then
	       dizi.push(eleman)
	     end
	end
	
	print filtir
	puts()
	
	puts("HTML dosyamizda ki acik taglar:")
	
	print dizi
	puts() 
 
	print("Taglar dengelimi?---> Sonuc:")
	puts(html_denge(filtir))
 
	
end
 
#Dosyamizdaki taglarin dengeli dengesiz olub olmamisini kontrol eder 
def html_denge(taglar)
		index = 0
		s = Stack.new()
		balanced = true
		
		dizi = []
		taglar.each do |eleman|
		    if eleman.match(/<[^\/]+?>/) then
		       dizi.push(eleman)
		     end
		end
	
		while (index < taglar.length() and balanced == true) do
			tag = taglar[index]
			
			
			if dizi.include?(tag) then
				s.push(tag)
			else
				if s.isEmpty? then
					balanced = false
				else
					top = s.pop()
					if not matches(top,tag) then
						balanced = false
					end	
				end
			end
			index = index + 1
		end
			
		if balanced and s.isEmpty? then
			return true
 
		else
			return false
 
		end
end
 
def matches(openTag,closeTag)
	open =["<html>","<head>","<title>","<body>","<center>","<hx>","<b>","<hr>","<p>","<pre","<dl>","<dt>","<ul>","<ol>","<br>"]
	close =["</html>","</head>","</title>","</body>","</center>","</hx>","</b>","</hr>","</p>","</pre","</dl>","</dt>","</ul>","</ol>","</br>"]
	
	return open.index(openTag) == close.index(closeTag)
end
	
def main
 	html_filtirle
end
 
main if __FILE__ == $PROGRAM_NAME
