SNOBOL

Z Wikipedie, otevřené encyklopedie
Skočit na navigaci Skočit na vyhledávání
SNOBOL
Paradigma multi-paradigma: objektově orientované, funkcionální, logické
Vznikl v 1962
Autor David J. Farber, Ralph E. Griswold and Ivan P. Polonsky
Vývojář David J. Farber, Ralph E. Griswold, Ivan P. Polonsky, and Bellovy laboratoře
Poslední verze SNOBOL4 (1967)
Hlavní implementace SNOBOL, SPITBOL
Ovlivnil jazyky Icon, Lua, SL5

SNOBOL (angl. StriNg Oriented and symBOlic Language) je programovací jazyk vyvíjen v letech 1962 až 1967 v AT&T Bellových laboratořích pány David J. Farber, Ralpf E. Griswold a Ivan P. Polonsky, jehož poslední verzí je jazyk SNOBOL4. Byl jedním z několika textově orientovaných jazyků vyvíjených v 50. a 60. letech, mezi které patří i COMIT a TRAC.

SNOBOL4 se liší od většiny programovacích jazyků tím, že má vzory jako primární datový typ (tj. datový typ, jehož hodnoty mohou být měněny všemi způsoby povolenými kterémukoliv jinému datovému typu programovacího jazyka) a poskytováním operátorů pro řetězení a měnění vzorů. S řetězci generovanými během vykonávání programu může být zacházeno jako s programy a mohou být spouštěny.

SNOBOL4 byl v 60. a 70. letech docela široce vyučován na velkých univerzitách a v 70. a 80. letech byl též široce využíván jako jazyk pro práci s textem v humanitních oborech.

V 80. a 90. letech jeho užívání upadávalo, protože nové jazyky, jako například AWK a Perl, umožňovali manipulaci s řetězci pomocí regulárních výrazu. Vzory SNOBOL4 zahrnují gramatiky BNF, které jsou ekvivalentní bezkontextové gramatice a silnější než regulární výrazy. Regulární výrazy v současných verzích AWK a Perl jsou ve skutečnosti rozšířením regulárních výrazu v tradičním smyslu. Ale regulární výrazy, na rozdíl od vzorů jazyka SNOBOL4, nemohou být rekurzívní, což je značnou výhodou vzorů SNOBOL4. Nicméně regulární výrazy v jazyce Perl mohou být od verze Perl 5.10 (vydané v prosinci roku 2007) také rekurzívní.

Jeden z vývojářů jazyka SNOBOL, Ralph Griswold, navrhl nástupce jazyka SNOBOL4 nazvané "SL5" a "Icon", které kromě jiných nově přidaných funkcí také kombinovali backtracking vzorů SNOBOL4 a obvyklejší ALGOL strukturu.

Vývoj[editovat | editovat zdroj]

Původní jazyk SNOBOL byl vytvořen jako nástroj pro jeho autory k práci se symbolickou manipulací polynomy. Byl napsán v jazyce symbolických instrukcí pro IBM 7090. Měl jednoduchou syntaxi - jen jeden datový typ (řetězec - String), žádnou funkci, žádnou deklaraci a velmi malou kontrolu chyb. Nicméně i přes svou jednoduchost a osobitost se začal šířit i do jiných skupin. V důsledku toho se jeho autoři rozhodli ho rozšířit a vyčistit. Přepsali ho a rozšířili o doplňkové funkce - a to jak standardní, tak uživatelsky definované. Výsledek vydali jako SNOBOL3. Verze SNOBOL2 také existovala, ale neobsahoval uživatelem definované funkce a nebyl nikdy vydán. SNOBOL3 se stal docela populární a byl přepsán i pro jiné počítače než IBM 7090 - jinými programátory. A v důsledku toho vzniklo několik neslučitelných dialektů.

Jak SNOBOL3 začínal být populárnější, tak autoři dostávali více a více požadavků na rozšíření do jazyka. Také dostávali stížnosti ohledně nekompatibility a chyb ve verzích, které byly napsány jinými autory. Na adresu toho a ve prospěch nových počítačů zaváděných na konci 60. let se rozhodli vyvinout SNOBOL4 se spoustou extra datových typů a funkcí, ale založený na virtuálním stroji z důvodu portability mezi počítači. SNOBOL4 překladač byl stále psán v jazyce symbolických instrukcí. Nicméně makro funkce assembleru byly použity k definování instrukcí virtuálního stroje ze SNOBOL Implementation Language, SIL, což velmi zlepšilo přenositelnost jazyka.

Funkce[editovat | editovat zdroj]

SNOBOL4 podporuje několik zabudovaných datových typů, jako jsou celá čísla, reálná čísla, řetězce, vzory, pole, tabulky (asociativní pole) a také uživatelem definované datové typy a funkce. Způsob definování 'uživatelem definovaných datových typů' v jazyce SNOBOL4 byl v té době velmi pokročilý - podobně jako dříve v jazyce COBOL nebo později v jazyce Pascal.

Všechny příkazové řádky jsou ve tvaru:

label subject pattern = object : transfer

Každý z pěti prvku je volitelný. Obecně platí, že předmět je porovnáván vůči vzoru. Pokud je přítomen objekt, jakákoliv ovlivněná část je objektem nahrazena dle pravidel pro výměnu. Převod může být po absolutní větvi nebo podmíněné větvi - to závisí na úspěchu či neúspěchu při hodnocení předmětu, vyhodnocení vzorů, shodě vzorů, hodnocení objektu nebo konečného přiřazení. Převedeno do kódu a zkompilováno to může být také samotným programem během jeho spuštění.

Vzory jazyka SNOBOL mohou být velmi jednoduché nebo extrémně komplexní. Jednoduchým vzorem je pouhý řetězec (např. "ABCD"), ale komplexní vzor může být popsán rozsáhlou strukturou (např. kompletní gramatika počítačového jazyka). V jazyce SNOBOL je možné implementovat jazykového interpreta téměř přímo pomocí Backusovy-Naurovy formy, který jej rozšiřuje (s několika změnami). Vytvoření interpretu pro zcela teoretické kusy hardwaru by mohlo být na několik stovek řádků, ale s novou instrukcí to může být pouze na jeden řádek.

Komplexní vzory SNOBOLu mohou dělat věci, které by byly nepraktické ci nemožné udělat pomocí primitivnějších regulárních výrazu, jako to dělá většina ostatních jazyků. Část jejich síly vyplývá z tzv. "SPITBOL rozšířeních" (které byli od té doby zahrnuty do základů všech moderních implementací původního jazyka SNOBOL4), dosáhnout stejného výkonu je ovšem možné i bez nich. Část této síly pochází z vedlejších účinků, kterou je možné produkovat v průběhu "pattern matching" operace (porovnávání vzoru), včetně ukládání odpovídajících výsledků a schopnost spustit uživatelem napsané funkce během shody vzorů, který může provádět téměř jakékoli požadované zpracování, a pak ovlivnit probíhající směr přerušeného porovnávání vzorů, nebo v průběhu odpovídající operace dokonce změnit vzorec samotný. Vzory mohou být uloženy jako každá jiná primární datová položka (datový typ), mohou být zřetězeny, použity v rámci jiných vzorů, použity k vytvoření velmi složitých a sofistikovaných výrazů. Například je možné napsat vzor, který obsahuje "úplný název a mezinárodní poštovní korespondenční adresu", což výrazně přesahuje možnosti regulárních výrazů.

"SNOBOL Pattern-matching" používá backtracking algoritmus (zpětně procházející) podobný tomu, který je používán v logickém programovacím jazyce Prolog, který poskytuje vzory podobné konstrukce přes DCG (angl. Definite clause grammar). Tento algoritmus usnadňuje použití jazyka SNOBOL (jako logický jazyk) - oproti většině jiných jazyků.

SNOBOL ukládá proměnné, řetězce a datové struktury v jediné haldě (garbage-collection).

Příklad programů[editovat | editovat zdroj]

Program "Hello World" může vypadat následovně:

           OUTPUT = "Hello world"
 END

Jednoduchý program, který se ptá uživatele na jméno a využije možnost vstupu:

           OUTPUT = "What is your name?"
           Username = INPUT
           OUTPUT = "Thank you, " Username
 END

Možnost vybrat si ze třech výstupů:

           OUTPUT = "What is your name?"
           Username = INPUT
           Username "J"                                             :S(LOVE)
           Username "K"                                             :S(HATE)
 MEH       OUTPUT = "Hi, " Username                                 :(END)
 LOVE      OUTPUT = "How nice to meet you, " Username               :(END)
 HATE      OUTPUT = "Oh. It's you, " Username
 END

Neustálé vyžadování vstupů do přerušení (odeslání prázdného řetězce):

           OUTPUT = "This program will ask you for personal names"
           OUTPUT = "until you press return without giving it one"
           NameCount = 0                                            :(GETINPUT)
 AGAIN     NameCount = NameCount + 1
           OUTPUT = "Name " NameCount ": " PersonalName
 GETINPUT  OUTPUT = "Please give me name " NameCount + 1 
           PersonalName = INPUT
           PersonalName LEN(1)                                      :S(AGAIN)
           OUTPUT = "Finished. " NameCount " names requested."
 END

SNOBOL a Python[editovat | editovat zdroj]

Protože někteří uživatelé programovacího jazyka Python zjistili, že používání regulárních výrazů může být omezující, byl jazyk Python rozšířen o možnost použití "SNOBOL Pattern-matching". Rozšíření je nazváno jako SnoPy a bylo napsáno panem Don Rozenbergem.

Reference[editovat | editovat zdroj]

V tomto článku byl použit překlad textu z článku SNOBOL na anglické Wikipedii.