Thue

Thue ( / ˈt uːeɪ / ) er et esoterisk programmeringssprog udviklet af John Colagoyai begyndelsen af ​​2000. Det er et metasprog, der udviser en nultype i Chomsky-hierarkiet , altså en ubegrænset grammatik . Thue giver dig mulighed for at definere ethvert sprog og er Turing komplet.

Forfatteren beskriver det på denne måde: "Thue er den enkleste demonstration af begrænsningsprogrammering . Det er på grund af dette paradigme, at sproget ligner URISC- sprogene i imperativparadigmet. Med andre ord, det er et Turing-sump ."

Regler

Et Thue-program består af en tabel med regler og en begyndelsestilstand. Regeltabellen består af simple definitioner af formen

A  ::= B

A og B kan bestå af både individuelle bogstaver og symboler og deres grupper. Der kan være mange regler med samme A og forskellig B. Regeltabellen slutter med en tom regel:

::=

Starttilstanden er en streng af tegn skrevet efter regeltabellen.

Programmets opgave er at finde de originale (venstre) tegn og erstatte dem med højre i overensstemmelse med reglen.

Jobbet afsluttes, når ingen regler kan anvendes på strengen.

Således ligner et Thue-program en Turing-maskine: Der er et bånd af symboler, og der er et sæt regler, som de erstattes med.

Ubestemmelse

Et af sprogets nøgletræk er den ikke-deterministiske udvælgelsesrækkefølge.

Hvis der er flere tegn i strengen, som reglen kan anvendes på, så vil den blive anvendt på et tilfældigt valgt tegn.

Hvis der er defineret flere regler for det samme tegn, vil en tilfældigt valgt regel blive anvendt.

I/O

For at implementere input og output har sproget en særlig form for regler. Tilden bruges til at vise tegn:

En ::=~tegnstreng

Denne regel fjerner A fra strengen og udsender alle tegn efter tilden.

Sådan indtaster du tre koloner:

A ::=:::

Denne regel erstatter A med strengen læst fra input.

Programeksempler

Hej Verden! på Thue:

a::=~Hej verden! ::= -en

Der er ingen variable som begreber i sproget. Derfor er det for enhver beregning nødvendigt at indstille de tilsvarende regelsystemer. Det følgende program viser, hvordan man øger et binært tal (øger med én). Tallet er skrevet symbolsk og er markeret rundt om kanterne med en understregning:

1_::=1++ 0_::=1 01++::=10 11++::=1++0 _0::=_ _1++::=10 ::= _1111111111_

Determinisme er tilvejebragt ved tilstedeværelsen af ​​kun én regel og kun ét symbol, som den kan anvendes på på et bestemt tidspunkt.

Følgende program demonstrerer implementeringen af ​​sløjfer og reglernes ikke-determinisme:

b::=~0 b::=~1 xx::=xbx ::= xbx

Dette program udsender en endeløs række af etere og nuller. Cyclicitet er tilvejebragt som følger: efter hvert output fjernes tegnet b fra strengen xbx, de resterende xx tegn erstattes af xbx, hvilket gengiver starttilstanden. Det er således muligt at oprette afgrænsede loops, hvis antal iterationer er givet af antallet af bestemte tegn eller sæt af tegn i strengen:

_x::=i_ i::=~test! ::= _xxxxx

Dette program vil udskrive strengtesten! 5 gange. Bemærk, at rækkefølgen i og _x erstattes i er udefineret. Det vil sige, at programmet under udførelsen både kan behandle i som de vises, og vælge alle x fra strengen på én gang.

Se også

Links