Herkese selamlar TurkHackTeam ailesi,
Önceki konumuzda, programlama dilimizin temellerini atmıştık ve basit matematiksel işlemleri yapabilir hale getirmiştik. Bu konuda ise kendi cmd (shell) sistemimizi yapacağız. Şimdiden iyi okumalar.
Şimdi öncelikle yeni bir dosya oluşturuyoruz:
Önceki konumuzda, programlama dilimizin temellerini atmıştık ve basit matematiksel işlemleri yapabilir hale getirmiştik. Bu konuda ise kendi cmd (shell) sistemimizi yapacağız. Şimdiden iyi okumalar.
Şimdi öncelikle yeni bir dosya oluşturuyoruz:

Oluşturduğumuz dosyanın içine şu kodları yazıyoruz:
Bu kodları yazdıktan sonra programımızı çalıştırıyoruz:
Python:
import tkinter as tk
from lexer import Lexer
from parser import Parser
from interpreter import Interpreter
class THTShell:
def __init__(self, root):
self.root = root
self.root.title("THTShell — Command Console")
self.root.geometry("900x550")
self.root.configure(bg="black")
self.text_area = tk.Text(
root,
bg="black",
fg="white",
insertbackground="white",
font=("Consolas", 12),
borderwidth=0,
highlightthickness=0
)
self.text_area.pack(fill="both", expand=True)
self.text_area.bind("<Return>", self.handle_enter)
self.text_area.bind("<Key>", self.on_keypress)
self.text_area.focus()
self.cmd_prefix = "C:\\THTShell>"
self.last_prompt_index = None
self.insert_text("TurkHackTeam THTShell [Version 1.1.0]")
self.insert_text("(c) TurkHackTeam Corporation. All rights reserved.\n")
self.insert_prompt()
def insert_text(self, text, color="white", newline=True):
self.text_area.tag_config(color, foreground=color)
if newline:
self.text_area.insert(tk.END, text + "\n", color)
else:
self.text_area.insert(tk.END, text, color)
self.text_area.see(tk.END)
def insert_prompt(self):
self.text_area.insert(tk.END, f"{self.cmd_prefix} ", "white")
self.text_area.see(tk.END)
self.last_prompt_index = self.text_area.index(f"end-{len(self.cmd_prefix) + 2}c")
def on_keypress(self, event):
if not self.last_prompt_index:
return
try:
if self.text_area.compare(tk.INSERT, "<", self.last_prompt_index):
self.text_area.mark_set("insert", tk.END)
except tk.TclError:
return "break"
if event.keysym == "BackSpace":
try:
if self.text_area.compare(tk.INSERT, "<=", self.last_prompt_index):
return "break"
except tk.TclError:
return "break"
def handle_enter(self, event):
cursor_pos = self.text_area.index("end-1c")
try:
command_line = self.text_area.get(self.last_prompt_index, cursor_pos).strip()
except tk.TclError:
self.insert_text("Hata: komut okunamadı.", "red")
self.insert_prompt()
return "break"
self.text_area.insert(tk.END, "\n")
command = command_line.replace(self.cmd_prefix, "").strip()
if command.lower() in ["exit", "quit"]:
self.insert_text("Çıkış yapılıyor...", "yellow")
self.root.after(1000, self.root.destroy)
return "break"
if command == "":
self.insert_prompt()
return "break"
if command.lower() == "cls":
self.text_area.delete("1.0", tk.END)
self.insert_text("Microsoft THTShell [Version 1.1.0]")
self.insert_text("(c) EpicSoft Corporation. All rights reserved.\n")
self.insert_prompt()
return "break"
if command.lower() in ["help", "?"]:
self.show_help()
self.insert_prompt()
return "break"
result = self.run_command(command)
if result is not None:
self.insert_text(str(result), "lime")
self.insert_prompt()
return "break"
def show_help(self):
help_text = """
THTShell Komutları:
help / ? - Komut listesini gösterir
cls - Ekranı temizler
exit / quit - Shell'den çıkar
[ifadeler] - Matematiksel ifadeleri değerlendirir (ör: 5 + 3 * 2)
"""
self.insert_text(help_text, "cyan")
def run_command(self, command):
try:
lexer = Lexer(command)
tokens = lexer.generate_tokens()
parser = Parser(tokens)
tree = parser.parse()
interpreter = Interpreter()
result = interpreter.visit(tree)
return result
except Exception as e:
self.insert_text(f"Hata: {e}", "red")
return None
if __name__ == "__main__":
root = tk.Tk()
app = THTShell(root)
root.mainloop()
Bu kodları yazdıktan sonra programımızı çalıştırıyoruz:

Gördüğünüz gibi kendi cmd ekranımızı yaptık. Şimdi gelin birlikte bazı işlemler yapalım. ilk önce komut satırına help yazıyoruz ve entera basıyoruz:

Şimdi ise bazı matematiksel işlemler yapalım:

Zaten help komutu ile neler yapıldığını öğrendik. help komutu ile merak ettiğimiz şeyleri öğrenebiliriz. Konumuzun sonuna geldik. Önceki konuyu okumayanlar aşağıdan önceki konuya ulaşabilir. Bir sonraki konuda görüşmek üzere kendinize iyi bakın 
Önceki konu: Python ile Programlama Dili Yapma #2
Önceki konu: Python ile Programlama Dili Yapma #2





