220 likes | 497 Views
Eksootilisi programmeerimiskeeli Tõnis Nurk Sven-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
E N D
Eksootilisi programmeerimiskeeli Tõnis Nurk Sven-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