A Thue ( / ˈt uːeɪ / ) egy ezoterikus programozási nyelv , amelyet John Colagoya fejlesztett ki .2000 elején. Ez egy meta-nyelv, amely null típust mutat a Chomsky-hierarchiában , azaz egy korlátlan nyelvtan . A Thue lehetővé teszi bármilyen nyelv meghatározását, és a Turing teljes.
A szerző ezt így írja le: „A Thue a kényszerprogramozás legegyszerűbb demonstrációja . Ennek a paradigmának köszönhető, hogy a nyelv hasonló az imperatív paradigma URISC nyelveihez . Más szóval, ez egy Turing-mocsár ."
A Thue program egy szabálytáblázatból és egy kezdeti állapotból áll. A szabálytábla az űrlap egyszerű definícióiból áll
A ::= BA és B állhat egyedi betűkből és szimbólumokból, illetve ezek csoportjaiból. Sok szabály lehet ugyanazzal az A -val és különböző B -vel . A szabálytáblázat üres szabállyal zárul:
::=A kezdeti állapot a szabálytáblázat után írt karaktersorozat.
A program feladata, hogy megtalálja az eredeti (bal) karaktereket, és a szabálynak megfelelően jobbra cserélje.
A feladat akkor ér véget, ha a karakterláncra nem lehet szabályokat alkalmazni.
Így a Thue-program hasonló a Turing-géphez: van egy szimbólumok szalagja, és van egy szabálykészlet, amellyel helyettesíthetők.
A nyelv egyik legfontosabb jellemzője a nem determinisztikus kiválasztási sorrend.
Ha a karakterláncban több olyan karakter is van, amelyre a szabály alkalmazható, akkor az egy véletlenszerűen kiválasztott karakterre vonatkozik.
Ha több szabály van definiálva ugyanahhoz a karakterhez, akkor egy véletlenszerűen kiválasztott szabály kerül alkalmazásra.
A bemenet és a kimenet megvalósításához a nyelv speciális szabályokkal rendelkezik. A hullámvonal karakterek megjelenítésére szolgál:
A ::=~karakterláncEz a szabály eltávolítja az A -t a karakterláncból, és az összes karaktert a tilde után adja ki.
Három kettőspont beírásához:
A ::=:::Ez a szabály lecseréli A -t a bemenetből kiolvasott karakterláncra.
Helló Világ! csütörtökön:
a::=~ Helló világ! ::= aNincsenek változók, mint fogalmak a nyelvben. Ezért minden számításhoz be kell állítani a megfelelő szabályrendszereket. A következő program bemutatja, hogyan lehet egy bináris számot növelni (eggyel növelni). A szám szimbolikusan van írva, és a széleken aláhúzással van jelölve:
1_::=1++ 0_::=1 01++::=10 11++::=1++0 _0::=_ _1++::=10 ::= _1111111111_A determinizmust egyetlen szabály és egyetlen szimbólum jelenléte biztosítja, amelyre az adott pillanatban alkalmazható.
Az alábbi program bemutatja a hurkok megvalósítását és a szabályok non-determinizmusát:
b::=~0 b::=~1 xx::=xbx ::= xbxEz a program egyek és nullák végtelen sorát adja ki. A ciklikusságot a következőképpen biztosítjuk: minden kimenet után a b karaktert eltávolítjuk az xbx karakterláncból, a fennmaradó xx karaktereket xbx helyettesíti, visszaadva a kezdeti állapotot. Így lehetőség van korlátos ciklusok létrehozására, amelyek iterációinak számát a karakterláncban lévő bizonyos karakterek vagy karakterkészletek száma adja meg:
_x::=i_ i::=~teszt! ::= _xxxxxEz a program 5-ször kinyomtatja a string tesztet! Vegye figyelembe, hogy az i és _x cseréjének sorrendje nincs meghatározva. Ez azt jelenti, hogy a program a végrehajtás során azonnal feldolgozhatja az i-t, ahogy azok megjelennek, és egyszerre kiválaszthatja az összes x-et a karakterláncból.
Programozási nyelvek | |
---|---|
|