C için re2c ile basit bir lexer yazmak için C dosyanızın içine özel /*!re2c ... */ bloğu koyar, içinde düzenli ifadelerle kuralları tanımlarsınız; sonra re2c bu dosyadan C kodu üretir ve bunu normal C programı gibi derleyip test edersiniz. re2c
Aşağıda “string içinde ondalık sayı var mı?” türü minimal bir örnek akışı var. re2c
1. Basit C+re2c dosyası yazma
Örneğin lexer.re.c adında bir dosya oluşturup şu iskeleti hazırlayabilirsin (mantığı anlatan serbest bir örnek, orijinal dokümandan birebir değildir ve telif haklarına saygılıdır): re2c
lex(const char *s)fonksiyonu içinde:const char *YYCURSOR = s;ile imleci tanımla. re2c/*!re2c ... */bloğunda:re2c:yyfill:enable = 0;vere2c:define:YYCTYPE = char;gibi temel ayarları yap.- Örneğin
[1-9][0-9]* { return 0; }kuralı ile “en az bir basamaklı sayı gördüysem 0 döndür” ve* { return 1; }kuralı ile aksi durumda 1 döndür gibi basit kurallar yaz. re2c
main()içinde birkaçassert(lex("1234") == 0);gibi test çağrısı yaparak davranışı doğrulayabilirsin. re2c
Bu yapı, re2c’nin C kodu içine gömülü düzenli ifade kurallarını nasıl C fonksiyonuna dönüştürdüğünü gösterir. re2c
2. re2c ile C kodu üretme
Terminalde şu komutla re2c’yi çalıştırırsın: manpages.debian
re2c lexer.re.c -o lexer.c -i-o lexer.c: Çıktıyılexer.cdosyasına yaz. manpages.debian-i:#linedirektifleri ekleyerek hata satırlarını orijinal kaynakla ilişkilendirir. manpages.debian
Sonuçta lexer.c derlenmeye hazır saf C kodu olur. re2c
3. C derleyicisiyle derleme
Üretilen C dosyasını normal bir C programı gibi derlersin: manpages.debian
cc -Wall -O2 lexer.c -o lexer
Bu adımda re2c’nin ürettiği DFA tabanlı lexer, C ikili dosyasına (executable) dönüşür. re2c
4. Çalıştırma ve test etme
- Programı
./lexerşeklinde çalıştırıp içine gömdüğünasserttestlerinin geçtiğini kontrol edebilirsin. re2c - Ek test için:
- Komut satırından argüman alıp
lex(argv [re2c](https://re2c.org))üzerinde çalıştırabilir, dönüş değerini ekrana yazdırabilirsin. - Hatalı durumları görmek için kasıtlı olarak sayı içermeyen veya kenar durumda girişler verip çıktıyı inceleyebilirsin. re2c
- Komut satırından argüman alıp
Daha gelişmiş örnekler (C++98 lexer, UTF‑8 kimlik tanıyıcıları vb.) için re2c resmi dokümantasyonundaki “examples” ve “user manual (C/C++)” bölümlerine bakmak iyi bir sonraki adımdır. re2c