Bu proje, Lex ve Yacc kullanılarak geliştirilmiş basit bir hesap makinesi yorumlayıcısıdır. Projede:
- Temel aritmetik işlemler (toplama, çıkarma, çarpma, bölme),
- Parantez kullanımı,
- Değişken atamaları,
- Hata kontrolü,
- Bonus özellikler: Kayan nokta (floating-point) desteği ve üs alma (exponentiation) operatörleri (^ veya **) desteklenmektedir.
-
Lex & Yacc Kullanımı:
- Lex (calculator.l): Girdileri tokenize eder; sayılar (tam sayı ve ondalık), değişkenler, operatörler ve parantezleri tanımlar.
- Yacc (calculator.y): Gramer kurallarını ve semantik eylemleri tanımlar; ifadelerin doğru parse edilmesi ve hesaplanması sağlanır.
-
Operatör Önceliği ve Bağlayıcılık:
Operatör öncelikleri şu şekilde belirlenmiştir:+ve-: En düşük öncelik.*ve/: Orta öncelik.EXP(üs alma): En yüksek öncelik ve sağ birleşken (%right EXP).
-
Sembol Tablosu ve Değişkenler:
Basit bir sembol tablosu kullanılarak değişkenlerin değerleri saklanır. Tanımlanmamış değişken kullanıldığında hata mesajı verilir. -
Hata Yönetimi:
Eksik operand, sıfıra bölme veya geçersiz ifadeler yakalanarak kullanıcıya uygun hata mesajları sunulur.
-
calculator.l:
Lex spesifikasyon dosyası; sayılar, değişkenler, operatörler ve parantezler için token kuralları içerir. -
calculator.y:
Yacc spesifikasyon dosyası; gramer kuralları ve semantik eylemler (hesaplama, değişken ataması, hata kontrolü) tanımlanır. -
README.md:
Bu dosya; projenin genel açıklamasını, tasarım kararlarını, derleme ve çalıştırma adımlarını, test senaryolarını ve ek bilgileri içerir.
Aşağıdaki komutları sırasıyla kullanarak projeyi derleyip çalıştırabilirsiniz.
lex calculator.l yacc -d calculator.y gcc lex.yy.c y.tab.c -lfl -lm -o calculator ./calculator Mehmet Begun 231104084