SNOBOL - SNOBOL

SNOBOL
Paradygmat Bezwzględny , nieustrukturyzowany
Zaprojektowany przez David J. Farber , Ralph E. Griswold i Ivan P. Polonsky
Deweloper David J. Farber, Ralph E. Griswold, Ivan P. Polonsky i Bell Labs
Po raz pierwszy pojawiły się 1962 ; 59 lat temu ( 1962 )
Wersja stabilna
SNOBOL4 / 1967 ; 54 lata temu ( 1967 )
Strona internetowa www .snobol4 .org
Główne wdrożenia
SNOBOL, SPITBOL
Wpływem
COMIT
Pod wpływem
AWK , SL5 , Icon , bs , Lua

SNOBOL ("StriNg Oriented and symBOlic Language") to seria języków programowania opracowana w latach 1962-1967 w AT&T Bell Laboratories przez Davida J. Farbera , Ralpha E. Griswolda i Ivana P. Polonsky'ego, której kulminacją jest SNOBOL4. Był to jeden z wielu języków zorientowanych na ciągi tekstowe opracowanych w latach pięćdziesiątych i sześćdziesiątych; inne obejmowały COMIT i TRAC .

SNOBOL4 wyróżnia się na tle większości języków programowania swojej epoki, mając wzorce jako pierwszorzędny typ danych ( tj. typ danych, którego wartościami można manipulować na wszystkie sposoby dozwolone dla dowolnego innego typu danych w języku programowania) oraz zapewniając operatory wzorca konkatenacja i alternacja . Wzorce SNOBOL4 są rodzajem obiektów i dopuszczają różne manipulacje, podobnie jak późniejsze języki obiektowe, takie jak JavaScript, których wzorce są znane jako wyrażenia regularne . Dodatkowo ciągi SNOBOL4 generowane podczas wykonywania mogą być traktowane jako programy i albo interpretowane, albo kompilowane i wykonywane (jak w funkcji eval w innych językach).

SNOBOL4 był dość powszechnie nauczany na większych amerykańskich uniwersytetach w późnych latach 60. i wczesnych 70. i był szeroko stosowany w latach 70. i 80. jako język manipulacji tekstem w humanistyce .

W latach 80. i 90. jego użycie zanikło, gdy nowsze języki, takie jak AWK i Perl, sprawiły, że manipulacja ciągami znaków za pomocą wyrażeń regularnych stała się modna. Wzorce SNOBOL4 zawierają gramatyki BNF , które są odpowiednikami gramatyk bezkontekstowych i mają większe możliwości niż wyrażenia regularne. „Wyrażenia regularne” w obecnych wersjach AWK i Perl są w rzeczywistości rozszerzeniami wyrażeń regularnych w tradycyjnym sensie , ale wyrażenia regularne, w przeciwieństwie do wzorców SNOBOL4, nie są rekurencyjne, co daje wyraźną przewagę obliczeniową wzorców SNOBOL4. (Wyrażenia rekurencyjne pojawiły się jednak w Perlu 5.10, wydanym w grudniu 2007 r.)

Późniejsze języki SL5 (1977) i Icon (1978) zostały zaprojektowane przez Griswold, aby połączyć cofanie się dopasowywania wzorców SNOBOL4 z bardziej standardowymi strukturami podobnymi do ALGOL .

Rozwój

SNOBOLU1

Pierwotny język SNOBOL został stworzony jako narzędzie używane przez jego autorów do pracy z symboliczną manipulacją wielomianów. Został napisany w języku asemblera dla IBM 7090 . Miał prostą składnię, tylko jeden typ danych, łańcuch, brak funkcji i deklaracji oraz bardzo małą kontrolę błędów. Jednak pomimo swojej prostoty i „osobistego” charakteru jego zastosowanie zaczęło rozprzestrzeniać się na inne grupy. W rezultacie autorzy postanowili go rozbudować i uporządkować.

SNOBOLU2

SNOBOL2 istniał, ale był krótkotrwałą, pośrednią wersją rozwojową bez funkcji zdefiniowanych przez użytkownika i nigdy nie został wydany.

SNOBOLU3

SNOBOL został przepisany, aby dodać funkcje, zarówno standardowe, jak i zdefiniowane przez użytkownika, a wynik został wydany jako SNOBOL3. SNOBOL3 stał się dość popularny i został przepisany na inne komputery niż IBM 7090 przez innych programistów. W rezultacie powstało kilka niekompatybilnych dialektów.

SNOBOL4

Wraz ze wzrostem popularności SNOBOL3 autorzy otrzymywali coraz więcej próśb o rozszerzenia języka. Zaczęli również otrzymywać skargi dotyczące niezgodności i błędów w wersjach, których nie napisali. Aby rozwiązać ten problem i skorzystać z nowych komputerów wprowadzonych pod koniec lat sześćdziesiątych, podjęto decyzję o opracowaniu SNOBOL4 z wieloma dodatkowymi typami danych i funkcjami, ale opartymi na maszynie wirtualnej, aby umożliwić lepszą przenośność między komputerami. Tłumacz języka SNOBOL4 nadal był napisany w języku asemblera. Jednakże makro cechy montera użyto do określenia instrukcji maszynowych wirtualnym S Nobol I DROŻENIE L anguage sIL. To znacznie poprawiło przenośność języka, czyniąc stosunkowo łatwym przenoszenie maszyny wirtualnej, na której znajdował się tłumacz, poprzez odtworzenie jego wirtualnych instrukcji na dowolnej maszynie, która zawierała asembler makr lub rzeczywiście język wysokiego poziomu.

Język SIL niezależny od komputera powstał jako uogólnienie makr manipulacji ciągami znaków autorstwa Douglasa McIlroya , które były szeroko stosowane w początkowej implementacji SNOBOL. W 1969 McIlroy ponownie wpłynął na język, nalegając na dodanie typu tabeli do SNOBOL4.

Funkcje SNOBOL4

SNOBOL wyróżnia się formatem i stylem programowania, które radykalnie różnią się od współczesnych języków proceduralnych, takich jak Fortran i ALGOL .

SNOBOL4 obsługuje szereg wbudowanych typów danych , takich jak liczby całkowite i liczby rzeczywiste o ograniczonej precyzji , łańcuchy , wzorce , tablice i tabele (tablice asocjacyjne), a także umożliwia programiście zdefiniowanie dodatkowych typów danych i nowych funkcji . Funkcja definiowania przez programistę typów danych SNOBOL4 była w tym czasie zaawansowany — jest podobny do zapisów wcześniejszego COBOL i późniejszych języków programowania Pascal .

Wszystkie wiersze poleceń SNOBOL mają postać

wzór tematu etykiety = obiekt : transfer

Każdy z pięciu elementów jest opcjonalny. Ogólnie obiekt jest dopasowywany do wzorca . Jeśli obiekt jest obecny, każda dopasowana część jest zastępowana przez obiekt za pomocą reguł zastępowania. Przeniesienie może być absolutnym oddział lub warunkowy gałąź zależy sukcesu lub niepowodzenia oceny przedmiotu, ocena wzór, zespół wzorca, oceną obiektu lub ostatecznego przydziału. Może to być również transfer do kodu stworzonego i skompilowanego przez sam program podczas uruchomienia.

Formacja SNOBOL może być bardzo prosta lub niezwykle złożona. Prosty wzorzec to po prostu ciąg tekstowy (np. „ABCD”), natomiast złożony wzorzec może być dużą strukturą opisującą np. pełną gramatykę języka komputerowego. Możliwe jest zaimplementowanie interpretera języka w SNOBOL prawie bezpośrednio z jego wyrażenia Backus-Naur , z kilkoma zmianami. Stworzenie makra asemblera i interpretera dla całkowicie teoretycznego sprzętu może zająć zaledwie kilkaset linii, z nową instrukcją dodawaną w jednej linii.

Złożone wzorce SNOBOL mogą robić rzeczy, które byłyby niepraktyczne lub niemożliwe przy użyciu bardziej prymitywnych wyrażeń regularnych używanych w większości innych języków dopasowujących wzorce. Część tej mocy pochodzi z tak zwanych "rozszerzeń SPITBOL" (które od tego czasu zostały włączone do praktycznie wszystkich nowoczesnych implementacji oryginalnego języka SNOBOL 4), chociaż możliwe jest osiągnięcie tej samej mocy bez nich. Część tej mocy pochodzi z efektów ubocznych, które można wytworzyć podczas operacji dopasowywania wzorców, w tym zapisywania wielu pośrednich/wstępnych wyników dopasowywania i możliwości wywoływania funkcji napisanych przez użytkownika podczas dopasowywania wzorców, które mogą wykonać prawie każde pożądane przetwarzanie, a następnie wpływać na bieżący kierunek, jaki przyjmuje przerwane dopasowanie wzorca, lub nawet zmieniać sam wzorzec podczas operacji dopasowywania. Wzorce można zapisywać jak każdy inny element danych pierwszej klasy i można je łączyć, używać w innych wzorcach i używać do tworzenia bardzo złożonych i wyrafinowanych wyrażeń wzorców. Możliwe jest na przykład napisanie wzorca SNOBOL4, który pasuje do „pełnej nazwy i międzynarodowego adresu pocztowego”, co znacznie wykracza poza wszelkie praktyczne próby użycia wyrażeń regularnych.

Dopasowywanie wzorców SNOBOL4 wykorzystuje algorytm wycofywania podobny do tego używanego w języku programowania logicznego Prolog , który zapewnia konstrukcje podobne do wzorców za pośrednictwem DCG . Algorytm ten ułatwia używanie SNOBOL jako języka programowania logicznego niż w przypadku większości języków.

SNOBOL przechowuje zmienne, ciągi znaków i struktury danych w jednej stercie zbieranej śmieci .

Przykładowe programy

„Witaj świecie!” program może wyglądać następująco...

          OUTPUT = "Hello, World!"
END

Prosty program, który pyta o nazwę użytkownika, a następnie używa go w zdaniu wyjściowym...

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

Do wyboru między trzema możliwymi wyjściami...

          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

Aby kontynuować żądanie danych wejściowych, dopóki nie będzie więcej informacji...

          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

Realizacje

Klasyczna implementacja była na PDP-10 ; był używany do badania kompilatorów , gramatyki formalnej i sztucznej inteligencji , zwłaszcza tłumaczenia maszynowego i maszynowego rozumienia języków naturalnych . Oryginalna implementacja była na IBM 7090 w Bell Labs, Holmdel, NJ SNOBOL4 został specjalnie zaprojektowany do przenoszenia; pierwsza implementacja została rozpoczęta na IBM 7094 w 1966, ale została ukończona na IBM 360 w 1967. Została szybko przeniesiona na wiele innych platform.

Zwykle jest implementowany jako interpreter z powodu trudności w implementacji niektórych jego bardzo zaawansowanych funkcji, ale istnieje kompilator , kompilator SPITBOL , który zapewnia prawie wszystkie udogodnienia, jakie zapewnia interpreter.

Gnat Ada kompilator zawiera pakiet (GNAT.Spitbol), która realizuje wszystkie Spitbol semantyki łańcuchach. Można to wywołać z programu w Ada.

Edytor plików dla Michigan Terminal System (MTS) zapewniał dopasowywanie wzorców na podstawie wzorców SNOBOL4.

Obecnie dostępnych jest kilka implementacji. Macro SNOBOL4 w C napisane przez Phila Budne to darmowa implementacja typu open source, która może działać na prawie każdej platformie. Catspaw, Inc dostarczył komercyjną implementację języka SNOBOL4 dla wielu różnych platform komputerowych, w tym DOS, Macintosh, Sun, RS/6000 i innych, a te implementacje są teraz dostępne bezpłatnie w Catspaw. Minnesota SNOBOL4, autorstwa Viktorsa Berstisa, najbliższa implementacja PC do oryginalnej wersji mainframe IBM (nawet zawierająca obsługę instrukcji FORMAT w stylu Fortran) jest również bezpłatna.

Chociaż sam SNOBOL nie ma funkcji programowania strukturalnego , preprocesor SNOBOL o nazwie Snostorm został zaprojektowany i zaimplementowany w latach siedemdziesiątych przez Freda G. Swartza do użytku w ramach Michigan Terminal System (MTS) na Uniwersytecie Michigan . Snostorm był używany w ośmiu do piętnastu miejscach, w których działał MTS. Był również dostępny w University College London (UCL) w latach 1982-1984.

Snocone autorstwa Andrew Koeniga dodaje konstrukcje o strukturze blokowej do języka SNOBOL4. Snocon jest samodzielnym językiem programowania, a nie właściwym nadzbiorem SNOBOL4.

Implementacja SPITBOL wprowadziła również szereg funkcji, które, chociaż nie używają tradycyjnych słów kluczowych programowania strukturalnego, mogą być jednak używane do zapewnienia wielu równoważnych możliwości, które zwykle uważa się za „programowanie strukturalne”, w szczególności zagnieżdżonych konstrukcji typu if/then/else. Te funkcje zostały od tego czasu dodane do najnowszych implementacji SNOBOL4. Po wielu latach jako produkt komercyjny, w kwietniu 2009 SPITBOL został wydany jako wolne oprogramowanie na Powszechnej Licencji Publicznej GNU .

Nazewnictwo

Według Dave'a Farbera, on, Griswold i Polonsky „w końcu dotarli do nazwy Interpreter Ekspresji Symbolicznych SEXI”.

Wszystko szło dobrze, aż pewnego dnia złożyłem zadanie wsadowe, aby złożyć system i jak zwykle na mojej karcie PRACY – pierwszej karcie w talii, ja, w standardach BTL, uderzyłem w swoją pracę i moje imię – SEXI Farber.

Jedna z dziewczyn z Comp Center spojrzała na to i powiedziała "Tak myślisz" w humorystyczny sposób.

To wyjaśniło, że potrzebujemy innej nazwy! Siedzieliśmy, rozmawialiśmy, piliśmy kawę i kręciliśmy gumki, a po zbyt długim czasie ktoś powiedział – najprawdopodobniej Ralph – „Nie mamy szansy Snowballa na znalezienie nazwiska”. Wszyscy od razu krzyknęliśmy: „MAMY TO – SNOBOL” w duchu wszystkich języków BOL . Następnie przeciągnęliśmy nasz umysł, aby znaleźć to, co oznaczało.

Wspólne backronyms z "snobol" są 'String Oriented Symbolic Language' lub (jako quasi-initialism ) 'string Oriented Symbolic Language'.

Zobacz też

Bibliografia

Dalsza lektura

  • Emmer, Mark B. SNOBOL4+: Język SNOBOL4 dla użytkownika komputera osobistego . Englewood Cliffs, NJ: Prentice Hall, 1985 ( ISBN  0-13-815119-9 ).
  • Gimpel, James F. Algorytmy w SNOBOL4 . Nowy Jork: Wiley, 1976 ( ISBN  0-471-30213-9 ); ponownie opublikowane Salida, CO: Catspaw, 1986 ( ISBN  0-939793-00-8 ).
  • Griswold, Ralph E. Makroimplementacja SNOBOL4 . San Francisco, CA: WH Freeman and Company, 1972 ( ISBN  0-7167-0447-1 ).
  • Griswold, Ralph E., JF Poage i IP Polonsky. Język programowania SNOBOL4 . Englewood Cliffs, NJ: Prentice Hall, 1968 ( ISBN  0-13-815373-6 ).
  • Griswold, Ralph E. Przetwarzanie ciągów i list w SNOBOL4: Techniki i aplikacje . Englewood Cliffs, NJ: Prentice Hall, 1975 ( ISBN  0-13-853010-6 ).
  • Hokej, Susan M. Snobol Programowanie dla nauk humanistycznych . Nowy Jork: Clarendon Press; Oxford: Oxford University Press, 1985 ( ISBN  0-19-824676-5 ).

Zewnętrzne linki