Bu, Ubuntu Online, Fedora Online, Windows çevrimiçi emülatörü veya MAC OS çevrimiçi emülatörü gibi birden fazla ücretsiz çevrimiçi iş istasyonumuzdan birini kullanarak OnWorks ücretsiz barındırma sağlayıcısında çalıştırılabilen komut cpph'leridir.
Program:
ADI
cpphs - Haskell için serbestleştirilmiş cpp-a benzeri önişlemci
SİNOPSİS
cpph'ler [DOSYA ADI|SEÇENEK] ...
TANIM
cpph'ler liberalleştirilmiş bir yeniden uygulamasıdır. cpp (1) C ön işlemcisi, içinde ve için
Haskell.
Neden cpp'yi yeniden uygulamalısınız? Doğru veya yanlış, C ön işlemcisi Haskell'de yaygın olarak kullanılmaktadır.
kaynak kodu. Farklı derleyiciler için koşullu derleme sağlar, farklı
aynı derleyicinin sürümleri ve farklı işletim sistemi platformları. Ayrıca zaman zaman kullanılır
belirli platforma özgü ayrıntı biçimlerini etkinleştirebilen makro dili için
örnek tanımlarının ve FFI'nin sıkıcı standart oluşturma oluşturma gibi doldurma
beyanlar. Bununla birlikte, bariz estetiğin yanı sıra cpp ile ilgili iki sorun vardır.
olanlar:
Bazı Haskell sistemleri için, özellikle Windows'ta Hugs, gerçek bir cpp tarafından mevcut değildir.
Varsayılan.
Diğer Haskell sistemleri için bile, gcc 3.x serisi tarafından sağlanan ortak cpp
Haskell'in sözdizimi ile uyumlu olmayan şekillerde ustaca değişiyor. Orada var
her zaman örneğin, dize boşlukları ve asal karakterlerle ilgili sorunlar olmuştur.
tanımlayıcılar. Bu sorunlar sadece daha da kötüleşecek.
Bu nedenle, cpp'ye her ikisi de daha uyumlu olan bir alternatif sunmaya çalışmak doğru görünüyordu.
Haskell ve kendisi Haskell'de yazılmıştır, böylece derleyicilerle dağıtılabilir.
cpph'ler hemen hemen tüm özelliklerle uyumludur ve -geleneksel cpp tarzı.
İki modu vardır:
yalnızca koşullu derleme (--nomakro),
ve tam makro genişletme (varsayılan).
In --nomakro modunda cpph'ler yalnızca koşullu derleme eylemleri gerçekleştirir, yani #Dahil etmekVar,
#Eğer, ve #ifdef'ler metin değiştirme tanımlarına göre işlenir (her ikisi de komut-
satır ve dahili), ancak parametreli makro genişletme yapılmaz. Dolu
uyumluluk modu (varsayılan), metin değişiklikleri ve makro genişletmeler de
cpp olmayan metnin kalan gövdesinde işlenir.
Çalışma Özellikleri:
#ifdef basit koşullu derleme
#Eğer tanımlı(), &&, ||, ==, vb. öğelerin tam boole dili.
#elif zincirleme koşul cümleleri
#tanımlamak
satır içi tanımlar (metin değiştirmeler ve makrolar)
#undef tanımların satır içi iptali
#Dahil etmek
dosya eklenmesi
#hat satır numarası yönergeleri
\n # direktifin tamamında satır devamlılığı
/ ** / bir makro tanımı içinde belirteç dizilimi
## ANSI tarzı belirteç katantasyonu
# ANSI tarzı belirteç dizgeleştirme
__DOSYA__
DIY hata mesajları için özel metin değişimi
__HAT__
DIY hata mesajları için özel metin değişimi
__TARİH__
özel metin değiştirme
__ZAMAN__
özel metin değiştirme
Makro genişletme özyinelemelidir. Bir makro adının yeniden tanımlanması bir uyarı oluşturmaz.
Makrolar komut satırında şu şekilde tanımlanabilir: -D tıpkı metinsel değiştirmeler gibi. Makro
adların Haskell tanımlayıcıları olmasına izin verilir, örneğin asal ` ve ters tik ile
C'den biraz daha gevşek olan ancak yine de operatör içermeyebilirler
semboller.
Çıktıdaki satırların numaralandırılması, daha sonraki herhangi bir işlemcinin verebilmesi için korunur.
anlamlı hata mesajları. Bir dosya olduğunda #Dahil etmek'NS, cpph'ler uçlar #hat için direktifler
aynı neden. Numaralandırma, satır devamlarının varlığında bile doğru olmalıdır.
istemiyorsan #hat nihai çıktıdaki direktifler, --noline seçeneği.
cpp yönergelerindeki herhangi bir sözdizimi hatası, stderr'e bir mesaj verir ve programı durdurur.
#include'd dosyası bulunamaması, stderr için bir uyarı oluşturur, ancak işleme devam eder.
Komut satırında istediğiniz sayıda dosya adı verebilirsiniz. Sonuçlar
standart çıktı.
-Dsym metinsel bir değiştirme tanımlayın (varsayılan değer 1'dir)
-Dsym=val
belirli bir değere sahip metinsel bir değiştirme tanımlayın
-Iyol #include'lar için arama yoluna bir dizin ekleyin
-Odosya çıktı için bir dosya belirtin (varsayılan stdout'tur)
--nomakro
yalnızca #ifdef'leri ve #include'ları işleyin,
makroları genişletme
--noline
çıktıdan #line pisliklerini kaldırın
--şerit
C tarzı yorumları dışarıda bile boşluklara dönüştürün
cpp direktifleri
--karmalar
ANSI # stringise operatörünü ve ## için
makrolar içinde belirteç dizilimi
--Metin girişi Haskell kodu olarak değil, düz metin olarak ele alın
--Yerleşim
makro genişletmelerde yeni satırları koru
--yanık
okuryazar tarzı yorumları kaldır
--versiyon
cpph'lerin sürüm numarasını rapor et ve durdur
Varsayılan olarak tanımlanmış HİÇBİR metin değişikliği yoktur. (Normal cpp genellikle tanımlara sahiptir
makine, işletim sistemi vb. için. İsterseniz bunlar kolayca cpphs kaynak koduna eklenebilir.)
Arama yolu şu sırayla aranır: -I seçenekler, bunun dışında
çağıran dosya, ardından geçerli dizin her zaman önce aranır. Yine yok
varsayılan arama yolu (ve yine, bu kolayca değiştirilebilir).
FARKLILIKLARI DAN CPP
Genel olarak, cpphs, -geleneksel davranış, ANSI C değil ve
standart cpp'den aşağıdaki ana farklar.
genel
The # herhangi bir cpp yönergesini tanıtan, bir satırın ilk sütununda olmalıdır (oysa
ANSI, önce boşluk bırakılmasına izin verir # ).
üretir #hat n "Dosya" sözdizimi değil # n "Dosya" varyant.
C yorumları yalnızca cpp yönergelerinden kaldırılır. Diğerlerinden soyutlanmıyorlar
Metin. Örneğin, Haskell'de aşağıdakilerin hepsinin geçerli operatör olduğunu düşünün.
semboller: /* */ * / * Ancak, C-yorum kaldırmayı şuradan açabilirsiniz: --şerit seçeneği.
Makro dil
Kabul eder / ** / bir makro tanımında belirteç yapıştırma için. Yine de, /* */ (herhangi bir metinle
aç/kapat yorumu arasına) boşluk ekler.
ANSI ## belirteç yapıştırma operatörü ile kullanılabilir --karmalar bayrak. Bu önlemek için
aynı ada sahip herhangi bir geçerli Haskell operatörünü yanlış yorumlamak.
Bir dizgenin içinde bile (çift veya tekli) makro biçimsel parametresini gerçek ile değiştirir.
alıntı). Bu - geleneksel davranıştır, ANSI'de desteklenmez.
tanır # bir makro tanımında dizgileştirme operatörü, yalnızca --karmalar
seçenek. (Bu bir ANSI eklemesidir, yalnızca alıntılanan dizeleştirme (yukarıda)
ANSI tarafından yasaklanmıştır.)
Metinsel bir değiştirme tanımındaki boşlukları tam olarak korur (modulo yeni satırlar),
ancak önde gelen ve sondaki boşluk ortadan kalkar.
Bir makro tanımındaki (ve onu izleyen) boşlukları tam olarak korur (modulo
yeni satırlar), ancak baştaki boşluk elimine edilir.
Makro çağrı bağımsız değişkenleri içindeki boşlukları tam olarak korur (yeni satırlar dahil), ancak önde
ve sondaki boşluk ortadan kaldırılır.
İle --Yerleşim seçenek, metin değiştirme veya makro tanımındaki satır devamları
makro çağrısında satır sonları olarak korunur. (İçindeki düzene duyarlı kod için kullanışlıdır.
Haskell.)
onworks.net hizmetlerini kullanarak cpph'leri çevrimiçi kullanın