Eksootilisi programmeerimiskeeli Tõnis Nurk Sven-Erik Petermann
description
Transcript of Eksootilisi programmeerimiskeeli Tõnis Nurk Sven-Erik Petermann
Eksootilisi programmeerimiskeeli
Tõnis NurkSven-Erik Petermann
Mis ja milleks
● Ebaharilik– süntaks– andmehaldus
● Erilised eesmärgid– suurus– veidrus
Juttu tuleb:
● Brainfuck● Whitespace● Chef
Brainfuck (BF)
● 1993, Urban Müller● Eesmärk
– Turingi mõttes täielik– väikseim kompilaator (171 baiti)
● Tulemus– lint (30 000 pesa)– 8 instruktsiooni
Brainfuck (BF)
● Edasiarendused– lõpmatu lint– suurem pesa
● Järglased:– BFM (makrodega)– Aura– Bub– Doublefuck (laiendatud)– FuckFuck– Flatline– Spoon
Käsustik
• > Liiguta pea paremale• < Liiguta pea vasakule• + Suurenda pea all oleva baidi väärtust• - Vähenda pea all oleva baidi väärtust• . Väljasta pea all olev väärtus• , Sisesta bait ja salvesta see pea kohal
olevasse pessa• [ Hüppa üle vastava “]”, kui pea all on 0• ] Liigu vastava “[”-ni.
Näited
● .+[.+]– Väljastab ASCII sümbolid
Whitespace
● Edwin Brady, Chris Morris● Tühikud, tabid ja reavahetused● Imperatiivne● Pinupõhine● Kommentaarid kuhu- ja kuidasiganes ;)
Whitespace'i käsustik
● 3 instruktsiooni● Algab IMP'iga (Instruction Modification
Parameter)● [Space] Pinu manipulatsioon● [Tab][Space] Aritmeetika● [Tab][Tab] Ligipääs kuhjale● [LF] Juhtimisstruktuurid● [Tab][LF] Sisend-väljund
Whitespace'i käsustik (2)● Pinu:
– Täisarvud
● Kuhi:– Pinu võimalused– Ligipääs ka kasutajal (muutujad ja andmestruktuurid)
● Täisarvud:– Binaarsel kujul
● Tühik 0● Tab 1
– 1. sümbol● Tühik – positiivne● Tab – negatiivne
Whitespace'i käsustik (3)
● Parameetrid– n-bitised arvud (tabide ja tühikute jadad)– Märgendid
● Unikaalsed● Tühikute ja tabide kombinatsioonid
Pinu manipulatsioon
● Käsk Parameetrid Tähendus
● [Space] Arv Arvu lisamine pinusse● [LF][Space] - Pinu tipmise elemendi dublikaat● [Tab][Space] Arv n-nda elemendi kopeerimine pinu tippu● [LF][Tab] - Vahetab 2 pinu tipmise elemendi
kohad● [LF][LF] - Pinu tipmise elemendi kustutamine● [Tab][LF] Arv Kustutab pinu n tipmist elementi va ülemise
Aritmeetika
● Käsk Tähendus
● [Space][Space] Liitmine● [Space][Tab] Lahutamine● [Space][LF] Korrutamine● [Tab][Space] Jäägita jagamine● [Tab][Tab] Modulo
Heap access
● Tühik – salvestab pinusse● Tab – taastab pinust (asetab pinu tippu)● Süntaks:
– Aadress + väärtus + käsklus
Juhtimisstruktuurid● Käsk Parameetrid Tähendus
● [Space][Space] Märgend Märgi koht programmis● [Space][Tab] Märgend Pöördu alamprogrammi poole● [Space][LF] Märgend Mine tingimusteta märgendile● [Tab][Space] Märgend Mine märgendile, kui pinu tipus on 0 ● [Tab][Tab] Märgend Mine märgendile, kui pinu tipus on
negatiivne arv● [Tab][LF] - Lahku alamprogrammist ja anna juhtimine tagasi
selle väljakutsujale● [LF][LF] - Lõpeta programmi täitmine
I/O
● Käsk Tähendus
● [Space][Space] Väljasta pinu tipust sümbol● [Space][Tab] Väljasta pinu tipust arv● [Tab][Space] Loe sisse sümbol ja aseta pinu tipmise
elemendiga määratud aadressile● [Tab][Tab] Loe sisse arv ja aseta pinu tipmise
elemendiga määratud aadressile
Näited
● [Space][Space][Space][Tab][LF] – pane pinusse 1
● [LF][Space][Space][Space][Tab][Space][Space]
[Space][Space][Tab][Tab][LF] – aseta märgend
Chef
● Programm on retsept– koostisained– valmistamine
● Muutujad on toiduained● Mälu pinudena kaussides● I/O
– sisendiks ainult numbrid– väljundiks ka tähed
Retsept
● Nimi● Kommentaarid● Koostisained● Valmistamisõpetus● Abiretseptid
– kõik muu, v.a. abiretseptid
Koostisained
● Vedelikud– ml, l, dash[es]
● Kuivained– g, kg, pinch[es]
● See või teine– cup[s], teaspoon[s], tablespoon[s]
● Sisend külmkapist
Kausid ja taldrikud
● Piiramatu arv● Sisuliselt pinu● Kausside operatsioonid● Kogu aritmeetika toimub kaussides● Väljund taldrikutel
Juhtimisstruktuurid
● Verb the koostisaine.– Mix the juices.
● Verb' [ the koostisaine' ] until verbed.– Stir the fluids until mixed.
● Abiretseptid– Serve with abiretsept.– kõik põhiretsepti anumad näha– esimese kausi sisu põhiretsepti esimesse kaussi