LexerWithAutomat, küçük bir eğitim dili için yazılmış masaüstü bir lexer çalışma alanıdır. Uygulama kaynak metni açma/düzenleme, lexical analiz çalıştırma, token listesini konum bilgileriyle gösterme ve çıktıyı temizleme/yazdırma işlevlerini sağlar.
Bu depo, 2012 tarihli öğrenci projesinin modern Qt 5 / Qt 6 araç zincirleri için güncellenmiş sürümünü içerir. Eski, kırılgan durum tablosu kodu; test edilebilir ve okunabilir bir lexer çekirdeğiyle değiştirilmiştir.
- Qt Widgets tabanlı sade masaüstü arayüz
- Ayrık
Lexersınıfı ile UI ve analiz mantığının ayrılması - Satır ve sütun bilgisi içeren token çıktısı
- Geçersiz karakterler için açık hata raporlama
- Güvenli dosya kaydetme için
QSaveFile - Hem
qmakehemCMakeile derleme desteği - Qt Print Support ile yazdırma desteği
TOKEN_BRACE_PAREN:(){}TOKEN_PLUS_MINUS:+-TOKEN_ASSIGN_PLUS_MINUS:+=-=TOKEN_ASSIGN:=TOKEN_COMPARE:==TOKEN_RELATIONAL:<>TOKEN_SEPARATOR:;,TOKEN_INTEGER_LITERALTOKEN_FLOAT_LITERALTOKEN_IFTOKEN_WHILETOKEN_INTTOKEN_IDENTIFIER
main.cpp: Uygulama giriş noktasımainwindow.h/mainwindow.cpp: Ana pencere, dosya işlemleri ve çıktı sunumulexer.h/lexer.cpp: Lexer çekirdeğimainwindow.ui: Qt Designer arayüz tanımıRes.qrc: Uygulama ikon kaynaklarıOmerNote.pro:qmakeprojesiCMakeLists.txt: Modern CMake projesi
- C++17 uyumlu bir derleyici
- Qt 5 veya Qt 6 geliştirme paketleri
- Qt 5 için:
qtbase5-dev - Qt 6 için:
qt6-base-dev
- Qt 5 için:
- Yazdırma özelliği için Qt Print Support
Qt 5 ile bu projeyi derlemek için aşağıdaki paketler yeterlidir:
sudo apt update
sudo apt install -y \
build-essential \
cmake \
qtbase5-dev \
qtbase5-dev-tools \
qt5-qmake \
qtchooser \
libglu1-mesa-dev \
libgl-dev \
libegl-dev \
libvulkan-dev \
libxext-devrm -rf build
cmake -S . -B build
cmake --build build -j"$(nproc)"rm -f Makefile
qmake OmerNote.pro
make -j"$(nproc)"- Uygulamayı başlatın.
- Kaynak kodu pencereye yapıştırın veya
Dosya > Açile bir dosya yükleyin. Analiz > Lexical Analizi Çalıştırkomutunu verin.- Alt panelde token ve hata çıktılarını inceleyin.
Örnek giriş:
int counter = 10;
while (counter > 0) {
counter -= 1;
}Bu lexer, bilinçli olarak küçük bir token kümesini tanır. Aşağıdaki karakterler veya yapılar şu anda desteklenmez:
- Çift tırnak:
" - Tek tırnak:
' - Fonksiyon çağrısı için özel token kuralları
- String literal yapıları
- Karakter literal yapıları
- Bölme, çarpma, mod gibi operatörler:
/*% - Köşeli parantezler:
[] - İki nokta, yorum ve benzeri ek sözdizimleri
Örneğin aşağıdaki girişte printf bir TOKEN_IDENTIFIER olarak tanınır; ancak " karakteri lexer tarafından tanınmaz ve hata olarak raporlanır:
printf("test")Bu örnekte beklenen davranış:
printftanınır(ve)tanınır"karakterleri tanınmaztestiçeride harflerden oluştuğu için tanımlayıcı gibi ayrışır, fakat string literal olarak ele alınmaz
Bu güncellemede aşağıdaki teknik sorunlar giderildi:
- Qt 4 döneminden kalma
QtGui/trUtf8/toAsciibağımlılıkları kaldırıldı - Tanımsız davranış üreten tarama kodu kaldırıldı
- Dosya açtıktan sonra kaydetmenin yanlış hedefe yazabilmesi düzeltildi
- Lexer çıktısındaki taşma ve sonlandırma sorunları kaldırıldı
- Arayüz sabit koordinatlar yerine yeniden boyutlanabilir düzene geçirildi
- Derleme sistemi C++17 ve Qt Print Support ile güncellendi
Bu çalışma alanında Qt geliştirme başlıkları kurulu değilse yerel derleme doğrulaması yapılamaz. Proje dosyaları bu nedenle Qt 5 / Qt 6 geliştirme paketlerinin bulunduğu bir ortam hedeflenerek güncellenmiştir.