Cs

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 ."

Szabályok

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  ::= B

A é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.

Határozatlanság

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.

I/O

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ánc

Ez 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.

Programpéldák

Helló Világ! csütörtökön:

a::=~ Helló világ! ::= a

Nincsenek 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 ::= xbx

Ez 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! ::= _xxxxx

Ez 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.

Lásd még

Linkek