Moda i stil

Rajski jezik. Razvijen adaptivni jezik interaktivnog programskog sistema dsp. Prevodi sveti i profani

Rajski jezik.  Razvijen adaptivni jezik interaktivnog programskog sistema dsp.  Prevodi sveti i profani

1. Ovo je priča o tome kako su ljudi prestali da se razumeju i pojavili su se brojni jezici savremenog sveta. Koliko je ovaj mit popularan među raznim narodima i koja su njegova tumačenja?

2. Mit o Vavilonskoj kuli zasniva se ne samo na vjerovanju da je u početku cijelo čovječanstvo govorilo istim jezikom, već i na činjenici da je taj jezik bio „idealan“: nazivi predmeta su prenosili njihovu pravu suštinu. Da li predstavnici drugih kultura dijele ove stavove i smatraju da je njihov jezik najbliži izvornom?

Odgovor na prvo pitanje nudi se u Postanku 11:1-9 Starog zavjeta, gdje se kaže da je Bog odlučio kazniti ljudsku rasu stavljajući na nju prokletstvo zbrke jezika. Odgovor na drugo pitanje može se naći u Postanku 2:19. U ovom dijelu Bog je Adamu doveo sve životinje i ptice da čuje kako će ih Adam zvati, a "kako čovjek zove svako živo biće, tako mu je bilo ime". Improvizirana kulturna turneja će nam omogućiti da vidimo kako su ova pitanja pokrivena. Što se tiče prvog od njih, mnogi se slažu sa Starim zavjetom: različitost jezika je kazna Gospodnja, ili barem rezultat nekog nepovoljnog faktora.

Legenda jednog od australijskih plemena govori o jedenju starih ljudi. Plemena koja su jela samo telo govorila su „čistim“ jezikom, a ona koja su jela unutrašnje organe govorila su „nečistim“. Afrički Kabili vjeruju da su ljudi počeli govoriti različite jezike kao rezultat sukoba. Prema plemenu iz Asama, do zbrke jezika došlo je zbog činjenice da je jednom troje djece lovilo pacova. Jedno od amazonskih plemena smatra da je Bog podijelio ljude i njihove jezike kako bi Mu postali poslušniji. Među domorodačkim stanovništvom Amerike, u plemenu Maidu (Kalifornija), vjeruje se da su ljudi u početku govorili istim jezikom, ali jednog dana, na pogrebnoj ceremoniji, jezik je prestao biti jedan. Irokezi vjeruju da je do razdvajanja jezika došlo zbog porodične svađe koja je rezultirala smrću djeteta. Ali pretpostavka da je višejezičnost prokletstvo nije tako uobičajena kao što se čini. U svijetu postoji mnogo verzija prema kojima je do razdvajanja došlo zbog prirodnih procesa.

Drevna indijska sveta himna "Rigveda" spominje da je nekoć postojao Vak ("riječ") i da su ga bogovi podijelili na mnoge oblike. Narodi Indokineskog poluostrva govore o šest rasa, od kojih je svaka imala svoj jezik u obliku stabljike, koja se izvijala iz tikvice. Pleme Quiche (Gvatemala) ima mit da su ljudi živjeli zajedno i govorili istim jezikom dok se nisu podijelili u grupe. Svaka je izabrala boga za sebe i počela da govori svojim jezikom.

Mit o stvaranju južnoameričkog plemena Navaho govori o "Ženi koja se mijenja" i pojavi stvarnih naroda koji su govorili njenim jezikom. Tako je stvorila susjedne narode - Pueblose, meksičke starosjedioce i druge, a oni su govorili svojim jezicima, šireći ih u različitim smjerovima. U islamu, Kur'an uči da Adam nije izmišljao imena niti bilo šta drugo, već ga je Allah svemu podučio. Raznolikost jezika je apsolutno prirodna i predstavlja manifestaciju Allahove moći. Svi ljudi mogu razumjeti objave Kur'ana, na kojem god jeziku su napisane.

Mitološki sistem mnogih naroda svijeta nema objašnjenje za zbrku jezika, koja se jednostavno podrazumijeva, pa stoga ne može odgovoriti na naše pitanje. Međutim, u gotovo svim kulturama svijeta spominje se "idealni" jezik (pitanje 2). Iznad smo spomenuli australsko pleme, koje vjeruje da neki ljudi (hrane se ljudskim tijelom) govore "čistim" jezikom koji prenosi pravu suštinu stvari. Prema starim Egipćanima, bog Ptah je svemu dao imena, pa je jezik postao dar bogova. U Kini su "ispravan" jezik učili mitski carevi. Kur'an razmatra raznolikost jezika kao podjelu jednog jezika koji uključuje sve ostale.

Svuda ljudi pokušavaju da shvate kako naziv predmeta otkriva njegovu suštinu. Pretpostavlja se da ili "idealan" jezik koji opisuje pravu suštinu subjekta postoji danas, ili je ostao u prošlosti. Druga pretpostavka služi kao preduvjet za potragu za istinom i harmonijom u svijetu. Čini se da su ideje o povezanosti jezika sa stvarnim svijetom i ljudskim postojanjem usađene u naše umove. S tim u vezi, postavlja se pitanje, koje je prvi put izrečeno u Platonovom dijalogu "Kratil" i od tada je predmet stalnih rasprava: da li je veza između imena i objektivne suštine stvari prirodna (nastaje u subjektivnoj svijesti izvornog govornika? ) ili je ova veza uslovna i nasumična?

Jezik je sistem znakova koji vam omogućava da od značenja i značenja pojma pređete na njegovu oznaku.

Čovjek je verbalno biće i, za razliku od životinja, komunicira sa svojom vrstom uz pomoć jezika. Ponekad govore o "jeziku životinja", ali je jasno da je takav izraz uslovan - po svom bogatstvu i mogućnostima, jezik životinja nije sličan ljudskom. Anđelima za komunikaciju uopšte nije potreban jezik - teško ih je zamisliti da govore ruski ili engleski.

Funkcije jezika mogu biti različite - osim što prenosi informacije, pomaže u izražavanju osjećaja i procjena.

Da li se Sveto pismo može prevesti?

Jezik Crkve je jezik molitve, bogosluženja i Svetog pisma.

U nekim religijama, sveti tekstovi u početku postoje na jednom jeziku i smatraju se suštinski neprevodivim. Dakle, muslimanski Kuran je izvorno napisan na arapskom jeziku. Štaviše, muslimani vjeruju da je tako nastala ova knjiga na početku vremena.

Jevrejski pisari su takođe naginjali ideji o mogućnosti svetih tekstova samo na hebrejskom. U početku nije bilo tako sa kršćanskim spisima.

U III veku pne. takozvani "prevod sedamdesetorice" - Septuaginta - prevod Starog zaveta na grčki. Štaviše, neki istraživači vjeruju da je upravo Septuaginta igrala ulogu Svetog pisma u međuzavjetnim vremenima.

Upravo je postojanje Septuaginte postalo glavni argument u prilog fundamentalne prevodivosti Svetog pisma. Postoji, međutim, još jači. Sada se smatra dokazanim da je Hristos apostolima govorio aramejski. Ali sastavljači jevanđelja su bez oklijevanja prenijeli ove razgovore na grčkom.

Sada postoji naučni pravac - lingvističke rekonstrukcije. Njihovi sastavljači pokušavaju shvatiti kako su ovi dijalozi zvučali u originalu. Međutim, i dalje je predmet naučnih istraživanja.

Da li je u rajuhladno?

Prilikom prevođenja jezika na jezik ponekad nastaju problemi jer jezici nisu gramatički identični. Značenja i nijanse riječi u različitim jezicima su također različite.

Na primjer, fraza "raj je zeleno i hladno mjesto" jasno pokazuje da je Sveto pismo napisano u zemljama s toplom klimom, gdje je "hladnoća" prilično ugodna. U ruskom jeziku takve asocijacije teško da bi se pojavile. I glagol “ohladiti” u značenju “odmarati se”, “zabavljati se” ušao je u ruski kao paus papir od hebrejskog preko grčkog.

Da li su svi Sloveni razumeli Bibliju?

Sveto pismo nije doneto našim precima na ruskom jeziku. Ćirilo i Metodije - solunski Grci - razvili su novi pisani jezik zasnovan na govornom jeziku Solunskih Slovena.

Mnogo je naroda na svijetu koji koriste jezike koji nemaju pisani jezik. Dokle god govorimo o životu, nema problema. Ali, čim se neki vjerski tekst ili filozofska rasprava treba prevesti na takav jezik, jezik treba unaprijediti, što su Ćirilo i Metodije i učinili.

Ako pretpostavimo da je prije nekoliko hiljada godina slavenskim plemenima bilo lakše dogovoriti se među sobom nego modernim slavenskim narodima, onda ćemo biti u pravu - jezici su bili bliži. Ali to ne znači da je prevod Svetog pisma koji su napravili Ćirilo i Metodije bio razumljiviji Kijevljanima i Novgorodcima - pisani književni jezik je bio drugačiji.

Možda je to odlika ruske situacije, budući da je ruski književni jezik bliži crkvenoslovenskom nego moskovskom dijalektu. Naime, čitav crkvenoslovenski jezik ušao je u ruski kao „visoki smiraj“. Na primjer, čak i moderni participi - kao što su plač, trčanje - formirani su upravo prema crkvenoslavenskom modelu - u staroruskom će to biti "plakati", "trčati".

Ponekad su staroruski analozi potpuno ispali - "dobro" i "bologo" u nazivu "Bologoe"; "Kaciga", koja je samo u epovima, za razliku od "kacige".

Jezici bliski i... paralelni

U Drevnoj Rusiji postojala je situacija diglosije. To nije ono što je "dvojezičnost". Diglosija je paralelna upotreba dva jezika u društvu. Na primjer, u 19. vijeku su se koristili i ruski i francuski. Francuski je bio jezik visokog društva, ali, u principu, svaki tekst se mogao prevesti.

U diglosiji, jezici se ne ukrštaju u smislu upotrebe. Govorili su staroruski, mogli su da napišu kućnu belešku na staroruskom. Ali molili su se na crkvenoslovenskom.

Ovakvo stanje je postojalo prije Petra, u 18. vijeku se postepeno urušilo. Sada bi se nauka i književnost mogle razvijati na ruskom, ali na crkvenoslovenskom i dalje postoje samo molitve. Prevedite oglas na crkvenoslavenski i izgledat će kao šala ili blasfemija.

Sveštenik ili pastor?

Živimo u jedinstvenoj eri. U carskoj Rusiji Biblija se mogla čitati na ruskom, u staroj Rusiji se mogla slušati na crkvenoslovenskom. Ali većina ljudi je bila nepismena ili nije bila dovoljno obrazovana da čita i razumije Sveto pismo.

U sovjetsko vrijeme svi su se opismenili, ali nije bilo teksta Svetog pisma.

Sada je pismenost i dalje očuvana, a tekstovi su dostupni.

Pored samog Svetog pisma, pozvani smo da savladamo još neke slovenske tekstove - od molitava do bogosluženja. Istina, postojeći prijevod na ruski je pomalo težak za razumijevanje. U 19. stoljeću, bez analoga, prevodioci su često prenosili slavenizame u prijevod.

Tako je fraza “Ja sam dobri pastir” prešla u prijevod. I evo nekih poteškoća. Doslovni prijevod s grčkog zvučao bi: „Ja sam dobar pastir“, ali takav prijevod se doživljava kao nizak. S druge strane, sada će običan slušalac o uzvišenom "pastoru" doživjeti prije kao o "svešteniku". Međutim, mora se priznati da je doslovan prijevod mnogih biblijskih izreka na ruski nemoguć - fraza "usta djeteta govore istinu" - neće se doživljavati kao filozofska izreka.

Ali općenito, razumijevanje slovenskog teksta Biblije više otežava nerazumijevanje značenja, a ne riječi.

Posebna poteškoća su gramatičke konstrukcije. Na primjer, postoji niz pojačanja koja dolaze iz grčkog. "Oprosti grijehe i prijestupe" znači, jednostavno, oprostiti sve grijehe. Slične su konstrukcije tipa “ljut od ljutnje”, “ljubljen s ljubavlju”.

Prilikom prevođenja svetih tekstova na druge jezike nastaju i problemi (iako narodi na čije jezike Sveto pismo još nije prevedeno čine možda 5℅ stanovništva Zemlje). Odnosno, nastavlja se posao koji su Ćirilo i Metodije uradili za Slovene.

Ćirilo i Metodije nisu bili prvi - prije toga su postojali prijevodi na etiopski, gotski. Nakon Ćirila i Metodija, Stefan Permski je preveo Sveto pismo na zirski jezik.

Prevodi sveti i profani

Da li se svaki prijevod smatra svetim tekstom? Ne, ali samo u mjeri u kojoj je to prihvaćeno u crkvenim zajednicama. Na primjer, sinodalni prijevod kao liturgijski prijevod nije zabranjen, ali nije prihvaćen. Ali ga kao takvog koriste protestanti, na primjer, ruski baptisti.

Postoje čak i moderne struje protestantizma koje vjeruju da bi biblijski tekst trebao biti dostupan svima. Objavljuju se i biblijski stripovi.

Nema problema sa tekstom Novog zaveta - njegov izvor je poznat na grčkom. Ali osnova sinodalnog prijevoda Starog zavjeta bio je hebrejski tekst. Fragmenti iz grčkog prijevoda umetnuti su samo kada su neslaganja bila suštinska.

U modernoj verziji bilo bi lijepo imati dva prijevoda - i sa hebrejskih masoretskih tekstova i sa grčkog. Bilo bi zgodno za one koji ne znaju oba jezika.

Odgovori na pitanja

Nakon govora, protojereju Aleksandru je postavljeno nekoliko pitanja:

Kojim jezikom je Adam govorio?

- Teško je reći. S jedne strane, jezik se mijenja dok je živ. Ali niko ne zna nije li to bilo novo svojstvo jezika koje se pojavilo nakon izgradnje Babilonske kule.

Ali, u svakom slučaju, Adamov jezik je vjerovatno bio drugačiji od bilo kojeg postojećeg jezika, uključujući hebrejski.

Postoji li kontroverza oko prijevoda usluge na ruski sada?

- O ovoj ideji se govorilo i prije revolucije, a dijelom su je kompromitovali obnovitelji. Nisu svi služili na ruskom, ali su tu ideju podržali.

Prevođenje Biblije na ruski nije bilo lako, iako je ideja mitropolita Filareta da je potrebno prevoditi i sa hebrejskog i sa grčkog bila mudra odluka. Iako nam to nije dalo naučne prevode sa oba jezika.

Postoje zasebni slučajevi upotrebe ruskog jezika - molitva optinskih staraca i akatist "Slava Bogu za sve" izvorno su napisani na ruskom jeziku.

Toliko je drugih prijevoda, a bit će toliko nijansi u njihovoj implementaciji da je lakše rusificirati tekstove nego ih prevesti.

Ovaj proces se već dugo odvija spontano. Ponekad se javljaju incidenti: na primjer, u „Obredu vjenčanja“ dvojni broj se ponekad neočekivano zamjenjuje množinom, a u modernim akatistima se koristi nedosljedno.

Kako Božansko Proviđenje učestvuje u formiranju različitih jezika?

„Jezik postoji izvan ljudske volje. Čovjek može stvoriti esperanto, ali prirodni jezici postoje prema svojim zakonima.

Ćirila i Metodija prevedeni su na crkvenoslovenski po nadahnuću odozgo, ali i po uzoru koji je postojao do tada.

Po nadahnuću odozgo, zapisujući jevanđelja na grčkom, apostoli su postavili temelj za ideju prevođenja Jevanđelja.

Pripremila Daria Mendeleeva

Fotografija Dmitrija Kuzmina

Razvijeni adaptivni jezik PARA interaktivnog programskog sistema DSSP Moskovski državni univerzitet Fakultet računarske matematike i kibernetike N.P. Brusentsov, V.B. Zakharov, I.A.

Opšti opis jezika PARA

Svrha i svrha razvoja jezika

PARA (Evolved Adaptive Language) je osnovni jezik DSSP Konverzacijskog sistema za strukturirano programiranje. Osnovni - znači biti osnova za sve dalje konstrukcije koje se sprovode u DSSP-u razvojem (proširivanjem, jačanjem) osnovnog jezika i, možda, prilagođavanjem jezičkih alata kreiranih na ovaj način specifičnoj aplikaciji. Za razliku od takozvanih jezika visokog nivoa, PARA ne pruža gotove tipove podataka i operacije, već samo elemente i primitive za efikasno definisanje potrebnih tipova. Na primjer, originalni formati podataka su 8-bitni bajt, 16-bitna riječ i 32-bitna duga riječ, koji se tumače ovisno o operacijama koje se na njima izvode kao cijeli brojevi, Booleovi vektori, kodovi znakova, logičke vrijednosti, podaci i procedure pokazivači. U tom slučaju moguće je, s jedne strane, manipulirati pojedinačnim bitovima bajtova i riječi, a s druge strane formirati kompozitne jedinice podataka (riječi višestrukih dužina, vektori, nizovi, tekstualni redovi, itd.), postavljanje jednog ili drugog tumačenja za njih uvođenje odgovarajućih operacija. Dakle, mogu se uvesti realni brojevi potrebne dužine i raspona vrijednosti, kompleksni brojevi i drugi objekti, a verzija jezika fokusirana na datu aplikaciju uključivat će objekte i sredstva svojstvena ovoj aplikaciji i neće uključivati ​​ono što se ne primjenjuje njemu - jezik će biti prilagođen (prilagođen) aplikaciji. Razvoj DSSP-a imao je za cilj stvaranje široko dostupnog i efikasnog mikroračunarskog programskog alata, tj. računari bazirani na mikroprocesorima. Bitna karakteristika arhitekture mikroprocesora je elementarna priroda tipova podataka i operacija, što znači, s jedne strane, univerzalnost, as druge strane složenost programiranja. Zbog svoje svestranosti, mikroprocesori i mikroračunari zasnovani na njima imaju potencijalno neograničene primjene. Međutim, praktična implementacija ovih mogućnosti prvenstveno počiva na složenosti razvoja potrebnih aplikativnih programa. Osim toga, zadovoljavajući aplikativni programi mogu se kreirati samo uz duboko i suptilno poznavanje specifičnosti dotične aplikacije, tj. treba ih razvijati ne samo programeri, već i visoko kvalifikovani stručnjaci u određenoj oblasti. Dakle, sistem programiranja ne samo da treba da poveća produktivnost programera u velikoj meri, već i da bude toliko jednostavan da ga mogu savladati i efikasno koristiti neprofesionalni programeri.

Radikalno rješenje ovog problema bilo bi, po svemu sudeći, značajno pojednostavljenje računarske arhitekture. Ali, nažalost, arhitektura mikroračunara se razvija u dijametralno suprotnom smjeru – putem sve veće složenosti i sofisticiranosti, pa profesionalnom programeru danas nije lako savladati jezik sklapanja mikroračunara. Sistemski programski jezici kao što su C ili PL/M umanjili su složenost razvoja softvera do određene (iako daleko od dovoljne) mjere, ali se teško mogu preporučiti ljudima koji nemaju iskustva u programiranju. Široko dostupan jezik bi, naravno, trebao biti jednostavniji i prirodniji, trebao bi se zasnivati ​​na najobičnijim, poznatim idejama o suštini i tehnici programiranja.

Pored pristupačnosti i značajnog smanjenja složenosti razvoja programa u poređenju sa programiranjem na asembleru, DSSP je zahtevao univerzalnost jezika, isto kao i asemblerskog jezika, visoku mašinsku efikasnost (tj. kompaktnost i brzinu koda) , pouzdanost provjerljivosti kreiranih programa i njihovu upotrebljivost i modifikaciju, kao i mobilnost (prenosivost) sistema i programa razvijenih u njemu na mašine različitih arhitektura.

proceduralno programiranje

Programiranje na jeziku RAJ prilično je slično tako raširenim vrstama ljudskih aktivnosti kao što su planiranje i organizovanje međusobno povezanih akcija, radova, procesa ili projektovanje složenih materijalnih objekata - mašina, agregata, struktura. Poput konstruktora koji implementira svoju ideju agregiranjem njenih sastavnih dijelova (blokova, sklopova, dijelova), programer sintetizuje potrebnu složenu akciju iz jednostavnih akcija koje pruža jezik. Takođe se može reći da se programiranje (konstrukcija) sastoji u postepenoj dekompoziciji (dekompoziciji) implementiranog objekta na sve manje i manje komponente.

U jeziku RAJA, glavni "konstruktiv" je procedura - imenovana radnja. Jezik se zasniva na ograničenom skupu najjednostavnijih procedura (primitiva) predstavljenih sopstvenim imenima (notacijama). Na primjer: + znači "dodaj", NEG znači "obrnuti znak", VCTR znači "kreiraj vektor". Konkretno, tu su primitivi: i; (dvotočka i tačka i zarez), što vam omogućava da uvedete novu proceduru, na primjer, pod nazivom P, definirajući je kao niz procedura P1, P2, ..., PN u obliku

: P P1 P2 ... PN ;

Ako procedura P predstavlja radnju koju kreirani program treba da izvede, konstrukcija ovog programa pomoću PARA jezika se svodi na sekvencijalno detaljiranje procedura P1, P2, ..., PN. To znači da svaka od ovih procedura mora biti definirana nizom manjih procedura, koje se zatim definiraju nizovima još manjih procedura, i tako dalje, sve dok se ne dobiju definicije koje se sastoje samo od primitiva.

Ova konstrukcija programa, počevši od datog cilja i postepeno razbijajući procedure koje se koriste do nivoa osnovnih jezičkih karakteristika, poznata je kao programiranje odozgo prema dolje. To je glavni način dobijanja programa na jeziku RAJ za rješavanje pojedinačnih, dobro definiranih zadataka. Suprotno je programiranje odozdo prema gore – izgradnja na bazi osnovnog jezika sistema postepeno proširenih procedura fokusiranih na određeno problematično područje. Na taj način se vrši razvoj jezika i njegovo prilagođavanje specifičnoj primjeni.

U oba slučaja, važno je pažljivo strukturiranje programa koji se kreiraju: svaki program i svaki dio programa mora se sastojati od malog broja zasebnih dijelova, od kojih svaki obavlja specifičnu funkciju i omogućava autonomnu verifikaciju. U odnosu na jezik PARA, to posebno znači da definicije procedura treba da budu kratke: definitivni niz, po pravilu, ne bi trebalo da sadrži više od 5-7 članova. Strukturiranje omogućava razumljivost, provjerljivost i modifikaciju programa, značajno smanjuje složenost njegovog kreiranja i održavanja.

Gornji primjer definiranja procedure P je pojednostavljen. U stvari, sekvenca koja definiše može sadržati kao članove ne samo imena procedura, već i recepte (naredbe) koje se sastoje od više od jedne reči. Naziv procedure, koji se koristi bez kombinacije s drugim riječima, je naredba za izvršavanje procedure koju je on odredio. Slijed imena procedura daje upute za izvršavanje ovih procedura redoslijedom njihovih imena jedan za drugim (linearnim redoslijedom). Za postavljanje drugih sekvenci izvršavanja, PARA obezbjeđuje posebne riječi (prefikse) koje propisuju izvršavanje procedura imenovanih u kombinaciji s njima, ovisno o specificiranom stanju, kao i višestruko (ciklično) izvršavanje procedure.

Na primjer, linearni niz P0 P1 uzrokuje izvršenje procedure P0, a zatim izvršenje procedure P1. Ako se procedura P1 ne mora izvršiti uvijek, već samo ako se kao rezultat izvršavanja P0 dobije pozitivan broj, tada se umjesto P1 naredba izvršenja upisuje prema uvjetu: IF + P1, tj. umjesto P0 P1 biće P0 IF+ P1. PARA uključuje skup prefiksnih uslova koji vam omogućavaju da efikasno izrazite izvršenje uslova, kao i izbor od dve, tri ili više procedura.

Višestruko izvršavanje procedure je specificirano korištenjem RP prefiksa. Dakle, naredba RP P uzrokuje da se procedura P izvršava iznova i iznova sve dok se ne stvore uslovi pod kojima se aktivira EX sadržan u tijelu ove procedure - izlazak iz petlje, nakon čega se izvršava sljedeća naredba po linearnom redoslijedu . Uslov za izlazak iz petlje može biti, na primjer, jednakost nuli neke varijable X, koja se izražava kao:

Procedura čije je ime uključeno u definiciju druge procedure naziva se ugniježđenom u njoj. Ugniježđena procedura, ako nije primitivna, može zauzvrat sadržavati ugniježđene procedure, tj. gniježđenje može biti višestruko. Osim toga, pravila jezika PARA ne zabranjuju uključivanje u definiciju postupka vlastitog naziva ili naziva postupka koji sadrži ovaj naziv, tj. PARA dozvoljava rekurziju.

Ponovljeno izvršavana procedura također može biti ugniježđena unutar ponavljano izvršavane procedure. U ovom slučaju dolazi do ugniježđenja petlji. PARADISE omogućava višestruko ugniježđenje petlji.

Linearni niz naredbi, ugniježđenje, uvjetno i ciklično ugniježđenje procedura - ovim se iscrpljuju mogućnosti konstruisanja programa u jeziku RAYA. Oskudica, homogenost i prirodnost ovih sredstava ključ je lakoće savladavanja i upotrebe jezika. Istovremeno, to je rigorozan strukturirani programski jezik koji omogućava značajno smanjenje složenosti razvoja i pouzdanosti programa.

Procedure i podaci

Sve što je do sada rečeno je karakteristika RAJSKOG jezika kao sredstva za propisivanje akcija, konstruisanje proizvoljnih akcija iz konačnog skupa primitivnih operacija. Druga strana jezika su sredstva za predstavljanje objekata na kojima se izvode radnje – sredstva za predstavljanje i organizovanje podataka.

Izuzetno jednostavan element podataka je dvovrijedni element - bit. Bitovi su građevni blokovi svih ostalih formata i tipova podataka. U jeziku PARADISE, 8-bitni bajt, 16-bitna reč i 32-bitna duga reč su prihvaćeni kao osnovni formati. U zavisnosti od operacija koje se vrše nad njima, bajtovi, reči i duge reči podležu mnogim interpretacijama, tj. može poslužiti kao osnova za različite vrste podataka. Osim toga, oni su početni elementi za formiranje kompozitnih formata i tipova.

Zapravo, PARADISE ne sadrži ni jednostavne ni kompozitne tipove podataka - postoje samo osnovni formati (bajt, riječ, duga riječ) i sredstva za konstruiranje kompozitnih formata od njih: vektori i višedimenzionalni nizovi. U ovom slučaju, isti bajtovi (riječi, duge riječi), ovisno o izvršenim operacijama na njima, tumače se kao vektori bitova, ili kao binarni cijeli brojevi sa ili bez predznaka, ili kao slova ulazno/izlazne abecede, itd. Tipovi podataka i njihova pridružena ograničenja i provjere mogu se uvesti u jezičke ekstenzije specifične za domenu.

U osnovnom jeziku, deklaracija imena podataka obavlja samo funkciju pružanja pristupa podacima po imenu: broj memorijskih ćelija potrebnih deklaracijom i mehanizam za pristup njima su povezani sa imenom. Operacije testiranja i transformacije se ne primjenjuju direktno na imenovane podatke. Ove operacije su definirane na steku operanda, koji je niz 32-bitnih dugih riječi (elemenata steka) koji se dinamički modificiraju dodavanjem (guranjem) novih elemenata na njegov kraj, kao i uklanjanjem elemenata sa istog kraja (iskapanjem iz stog). Elementi se povlače obrnutim redoslijedom od onog kojim su poslani: prvi se povlači posljednji poslani. Podaci koji se testiraju ili transformišu šalju se u stek, gde se nad njima izvode propisane operacije, nakon čega se rezultati obrade mogu ukloniti iz steka.

Na primjer, ako postoji varijabla X deklarirana kao 32-bitna duga riječ, tada se samo dvije operacije mogu izvršiti direktno na njoj:

1) guranje njegove vrijednosti na stek, što se događa automatski svaki put kada se spomene ime X,

2) dodijeliti ga timu! X vrijednost posljednjeg (gornjeg) elementa koji treba iskočiti iz steka.

Ako, recimo, želite udvostručiti vrijednost X tako što ćete ga dodati samom sebi, onda to možete učiniti izvršavanjem sljedećih naredbi jednu za drugom:

Dvije instance vrijednosti X bit će gurnute na stek, zatim će ih komanda + ukloniti, sabrati i gurnuti rezultirajući iznos na stek, nakon čega će naredba! X će povući ovaj iznos i dodijeliti njegovu vrijednost varijabli X.

Uobičajeno za jezike visokog nivoa pisanje datog primjera u obliku X:=X+X je programeru poznatije, ali nije direktan odraz redoslijeda naredbi koje izvršava procesor, već je vrsta matematičke formule. Ovo je zgodno kada se programiraju računski problemi, međutim, u osnovnom jeziku, čini se da je korespondencija jedan-na-jedan sa naredbama koje se izvršavaju važnija, budući da se program može provjeriti komandu po naredbu direktno u programskom jeziku i generalno nije potrebno poznavanje jezika osim jezika procesora.

Ali posebno vrijedna prednost slaganja podataka je to što se procedure testiranja i transformacije mogu definirati i implementirati neovisno o podacima na koje se primjenjuju. Operacije testiranja i transformacije nisu formulirane u odnosu na identifikatore podataka (ili imena konstanti i varijabli, formalne parametre), već u odnosu na elemente steka, kojima se vrijednosti operanda moraju dodijeliti do trenutka kada se operacija izvrši. Na primjer, operacija sabiranja dva broja, koju izvodi naredba + (add), sastoji se od uzimanja gornja dva elementa (gornji i donji) kao sabiraka iz steka, izračunavanja njihove sume i slanja u stog. Da biste dodali dva broja, morate poslati njihove vrijednosti u stog i izvršiti naredbu +, rezultat će biti na vrhu hrpe.

Procedura test-transformacije s proizvoljnim brojem ulaznih i izlaznih parametara se stoga može definirati jednostavno kao imenovana akcija (bez liste parametara) koja se izvodi na steku koji sadrži vrijednosti argumenata u navedenom redoslijedu, a nakon izvršenja, vrijednosti rezultata . Da bi se takav postupak primijenio na jedan ili drugi skup specifičnih podataka, potrebno je te podatke poslati odgovarajućim redoslijedom na stog. Nakon što ih potroši, postupak će ostaviti na steku (također smještenom u određenom nizu) svoje rezultate.

Drugim riječima, nazivi procedura u PARA jeziku se koriste na isti način kao i znakovi operacija i u suštini su simboli operacija sa proizvoljnim brojem operanada. U skladu sa principom rada steka, operacije se pišu u postfiksnom obliku, tj. Ime operacije se postavlja nakon popisa imena ili vrijednosti njenih operanada. Na primjer, ako operaciju dobivanja zbroja tri broja označimo simbolom ++, tada će zbir brojeva A, 5 i B biti izražen na sljedeći način:

Bilo bi moguće uspostaviti formalna pravila postfiks jezika i rukovoditi se njima pri pisanju programa, ali je čovjeku lakše i pouzdanije baviti se ne pravilima, već modelom procesora steka, tj. sa modelom mašine za koju se kreiraju programi i koja će ih izvršavati. U slučaju jezika PARA, takva mašina je DSSP procesor - skup hardvera i programa koji implementira radnje propisane u ovom jeziku.

DSSP procesor

Fizički, DSSP procesor se može implementirati u obliku mikroprocesora one jednostavne i efikasno programabilne arhitekture koja bi omogućila da se problem softvera mikroračunara reši na najbolji mogući način. Ali takav mikroprocesor još nije stvoren, a njegova arhitektura mora biti emulirana na postojećim mikroračunarima kako bi se poboljšala njihova programibilnost. Naravno, emulacija je povezana s troškovima – zahtijeva memoriju i vrijeme računala, ali u slučaju emulacije PRSP procesora ovi troškovi su relativno mali.

Sa stanovišta programera, karakteristika procesora je njegova arhitektura, tj. informacije o tome kakav je ovaj procesor kao alat za obradu podataka, koje su mogućnosti prikazivanja podataka na ulazu i unutar procesora, koje su operacije testiranja i konverzije podataka, kako je organizirana vlastita memorija procesora, kao i pristup na glavnu i vanjsku memoriju, koje su to kontrole toka programa, interakcije sa vanjskim okruženjem, odgovora na vanredne događaje itd. Ovladavanje arhitekturom je neophodan uslov za smisleno (neformalno) programiranje, čime se značajno smanjuje broj grešaka i povećava pouzdanost programa.

Centralni element DSSP procesora je već pomenuti stek operanda. Zapravo, obrada se vrši u steku i, po pravilu, podaci se prenose kroz stog. Pojedinačne komande i kratke sekvence komandi iznad steka mogu se izvršiti tako što ih se dostavljaju na procesorski ulaz direktno sa terminalske tastature. U ovom slučaju, DSSP procesor imitira rad postfix kalkulatora. Brojevi koji se unose sa tastature i mnemonički kodovi operacija su razdvojeni razmacima. Uneseni tekst se prikazuje kao niz na ekranu terminala. Signal za kraj unosa i naredba procesoru "Izvrši unesenu instrukciju" je pritiskom na tipku takođe označeno , . Brojevi koji dolaze na ulaz procesora stavljaju se na stek, a komande se izvršavaju na steku. Rezultat proračuna dobijen na vrhu steka može se kopirati na ekran terminala pomoću naredbe. (tačka).

Na primjer, da biste procijenili izraz (2-5)*3 i prikazali rezultat, unesite:

2 5 - 3 * .

Nakon pritiska na tipku procesor daje rezultat, tako da će cijela linija izgledati

* 2 5 - 3 * . -90

Zvjezdicu na početku reda procesor izdaje kao signal da čeka na unos.

U razmatranom primjeru procesor je unesene brojeve percipirao i obradio kao decimalne cijele brojeve. U stvari, prilikom unosa, ovi brojevi su konvertovani u binarni komplementarni kod, a pri izlazu su ponovo konvertovani u decimalni. PRSP procesor također dozvoljava binarne, oktalne i heksadecimalne I/O modove. Da biste se prebacili na željeni način rada, morate izvršiti jednu od naredbi B2, B8, B10, B16, respektivno.

Pritiskom na tipke se unose procesorski kodovi koji predstavljaju slova naznačena na ovim tipkama (slova, brojevi, interpunkcijski znaci, simboli operacija). Niz ulaznih znakova formira ulazni niz - lanac bajtova koji sadrže znakovne kodove, jedan bajt po karakteru. Maksimalna dužina ulaznog niza je 80 znakova.

Obrađujući ulazni niz, procesor izdvaja riječi u njemu - kombinacije slova koje su međusobno odvojene razmacima i interpretira ih. Ako je riječ koja se obrađuje ime operacije (procedure) ili dato ime poznato procesoru, tada procesor izvodi radnje koje, po definiciji, ovo ime treba pozvati. Ako riječ nije poznata procesoru, onda pokušava da je protumači kao broj, uzimajući u obzir postavljeni način unosa/izlaza.

Brojevi su riječi koje se sastoje od cifara prihvatljivih u datom brojevnom sistemu i, možda, sadrže znak minus kao prvo slovo. U heksadecimalnom režimu unosa/izlaza, zajedno sa ciframa važe i latinična slova A, B, C, D, E, F. Primljeni broj se konvertuje u komplementarni kod dvojke i šalje u stog operanda kao 32-bitna duga reč. U ovom slučaju, ako je vrijednost broja izvan raspona reprezentativnih vrijednosti -2147483648: 2147483647, tada se zamjenjuje vrijednošću uporedivom po modulu 2**32 iz ovog raspona.

U slučaju da obrađena riječ nije poznata procesoru i ne može se prihvatiti kao broj, procesor prikazuje poruku na ekranu terminala: „Ne znam<обрабатываемое слово>i čeka dalje instrukcije.

Unos podataka u obliku proizvoljnog teksta (niza bajtova-literala) vrši se u obliku tekstualnih literala, koji su tekst stavljen u dvostruke navodnike, na primjer: "Text literal". Prijem tekstualnog literala na ulaz procesora uzrokuje da se tekst zatvoren između navodnika upiše u glavnu memoriju u obliku niza bajtova-litara. U ovom slučaju, adresa prvog bajta i broj bajtova (dužina teksta) se guraju u stog. Tekstualni literal kojem prethodi tačka procesor tumači kao naredbu za "stavljanje teksta između navodnika na ekranu terminala". Na primjer, davanje procesorskom unosu kombinacije znakova "Nema memorije" će uzrokovati da se na ekranu pojavi poruka: Nema memorije.

Kod jednog znaka se gura u stog kao niži bajt na vrhu kada ovaj znak stigne na procesorski ulaz, zajedno sa znakom # kojem prethodi. Na primjer, kombinacija znakova #L će poslati kod slova L u stog, kombinacija znakova #5 će poslati kod broja 5. TOB komanda za izlaz bajta na terminal prikazuje znak čiji je kod sadržan u nižem bajtu vrha steka.

Čak iu načinu direktnog izvršavanja instrukcija, PRSP procesor daleko prevazilazi mogućnosti konvencionalnog kalkulatora, pružajući korisniku, pored operacija obrade podataka, sredstva za deklarisanje imenovanih podataka i definisanje procedura koje se zatim mogu koristiti zajedno sa osnovne operacije. Deklarisanje imena podataka i definisanje procedura se vrši pomoću posebnih naredbi.

Na primjer, da biste kreirali 16-bitnu varijablu sa imenom, recimo, TEMP, trebali biste ukucati na tastaturi i primijeniti na ulaz procesora pomoću tipke komanda

VAR TEMP

Možete, zajedno sa deklaracijom, dodijeliti početnu vrijednost varijabli, na primjer, 0:

VAR TEMP 0 ! TEMP

Sada će dolazak imena TEMP na ulaz procesora uzrokovati da se trenutna vrijednost ove varijable gurne na stek, a dodjela nove vrijednosti njoj, uklonjene iz steka, može se izvršiti naredbom! TEMP.

Definiciju procedure uvodi naredba: (dvotočka) koja sadrži naziv procedure koja se definira i slovom definira lanac naredbi; (tačka-zarez) kao znak na kraju definicije. Hajde da demonstriramo definiciju i upotrebu procedura koristeći primer izračunavanja faktorijala prirodnog broja N po formuli

N!=N*(N-1)*(N-2)*...*2*1, tj. N-1 množenje.

FCT procedura da bi se dobio željeni rezultat mora pomnožiti dati broj N sukcesivno opadajućim brojevima, počevši od N-1 do 1, tj. samo N-1 puta. U PARA, ovo se programira izvršavanjem procedure P t puta: DO P, gdje je P ime procedure, t je trenutna vrijednost vrha steka, što pokazuje koliko puta treba izvršiti proceduru P.

Pretpostavimo da je prije primjene FCT procedure broj N gurnut na stek i da je na njegovom vrhu. Da bismo proceduru učinili razumljivijom, predstavljamo modifikabilni množitelj varijable K:

Uvodimo definiciju FCT procedure u obliku:

FCT [N] ! K K K 1-DO F . [N] ;

Komentari u uglastim zagradama odražavaju trenutno stanje steka operanda. Tim! K, koji započinje definisanu proceduru, promenljivoj K dodeljuje vrednost broja N uzetog iz steka. Zatim se K dva puta gura na stek i oduzimanjem 1 na vrhu steka, broj izvršenja ponovljene formira se postupak F jednak N-1. Nakon toga slijedi naredba DO F, koja propisuje petlju, nakon čega će vrh steka sadržavati željenu vrijednost faktorijala - N!. Tim. (tačka) prikazuje kopiju ove vrijednosti na ekranu terminala. Ostaje da se definiše procedura F koja modifikuje vrednost K oduzimanjem 1 i množi sa K delimični rezultat izračunavanja R koji se nalazi na steku. :

F [R] K 1- ! K [R] K * ;

Ispravnost obje procedure se provjerava izvršavanjem njihovih definicija naredbu po naredbu, prikazujući sadržaj steka operanda i vrijednost varijable K na ekranu terminala nakon svake naredbe. Po završetku FCT procedure, vrh stranice stek mora sadržavati vrijednost N!, a vrijednost varijable K mora biti jednaka 1.

Provjerene i ispravljene (ako su greške otkrivene tokom procesa verifikacije) procedure se testiraju primjenom na pojedinačne vrijednosti broja N. Pošto je procedura F ugniježđena u FCT, njeno testiranje se vrši automatski u procesu testiranja. ovo drugo. Treba imati na umu da vrijednosti rezultata ne bi trebalo da prelaze maksimalni pozitivan broj predstavljen u komplementarnom kodu dvojke 32-bitnom dugom riječi: 2147483647, tj. FCT daje tačne rezultate samo za N=1, ..., 13.

Upotreba FCT-a se ne razlikuje od upotrebe instrukcija izvornog procesora: da biste dobili rezultat, morate navesti vrijednost operanda i unijeti ime procedure:

5 FCTs 120

7 FCT 5040

Gornja implementacija FCT procedure zahtijevala je uvođenje pomoćne varijable K, međutim, funkcionalno ekvivalentna procedura se može izvesti bez pomoćne varijable, koristeći operaciju C, koja gura kopiju svog vrha na stek, a operacije E2 i E3, koji razmjenjuju vrh sa drugim i trećim elementom steka, respektivno. Definicija ovog postupka je sljedeća.

: FCTA [N] C 1- C DO FA D . ;

: FA C E3 * E2 1- ;

Prednost takve procedure "čistog steka" je njena potpuna autonomija: baš kao i osnovne operacije steka procesora, ona se izvodi samo na steku operanda, bez potrebe za drugom memorijom i bez izazivanja bilo kakvih promena u drugim komponentama procesora.

Nazivi procedura koje se definišu i deklarisani podaci unose se u procesorski rečnik, čime se uspostavlja veza između ovih imena i imenovanih objekata, odnosno sa tijelima procedura koje se nalaze u glavnoj memoriji i sa elementima ovog memorija dodijeljena za pohranjivanje deklariranih podataka. Obrađujući sljedeću riječ iz ulaznog toka, procesor pregledava rječnik i, nakon što je u njemu pronašao odgovarajuću riječ, izvodi radnje povezane s ovom riječju. Ako se pretraga pokaže neuspješnom, tada se, kao što je već spomenuto, pokušava numerička interpretacija date riječi, a ako to ne uspije, slijedi poruka da procesor ne poznaje riječ.

Kao rezultat kompilacije definicije procedure, naziv ove procedure i pokazivač (adresa) njenog tijela, koji je niz pokazivača procedura i podataka koji čine definiciju, unose se u rečnik. Drugim riječima, interna reprezentacija tijela procedure dobiva se zamjenom imena procedura i podataka u njegovoj definiciji sa pokazivačima na odgovarajuća tijela, koja su zauzvrat isti nizovi pokazivača, au slučaju primitivnih, lanci mašinskih instrukcija. Ovo interno predstavljanje programskog proceduralnog koda nazivamo.

Kada se uz kompilaciju definicije procedure P kompajliraju i definicije svih do tada nepoznatih ugniježđenih procedura, tada se formira potpuna hijerarhija pokazivača, koja osigurava mogućnost izvršavanja procedure P dostavljanjem samo njenog imena procesorski ulaz. U ovom slučaju, imena ugniježđenih procedura sastavljena u vezi s definicijom P, ako ne trebate pristupiti ovim procedurama zasebno, nema smisla pohranjivati ​​ih u rječnik. U određenom broju slučajeva ispostavlja se da je prikladno blokirati pristup jednom ili drugom dijelu rječnika, ostavljajući, možda, mogućnost izvođenja samo nekih procedura.

Da bi se ispunili takvi zahtjevi, rečnik je implementiran kao skup podrečnika, na kojima su definisane operacije koje omogućavaju kreiranje i uništavanje podrečnika i njihovih delova, brisanje naziva, zatvaranje i otvaranje pristupa određenim podrečnikima. Svaki podrečnik ima ime koje se koristi u naredbama koje se odnose na njega. Nazivi podrečnika moraju početi slovom $, na primjer: $PRIME, $EDIT, $FLOAT, $TEXTPROC, $GRAPHICS.

Podrečnik $PRIME, koji sadrži osnovni skup PRSP riječi, otvoren je nakon pokretanja procesora kako za pristup riječima sadržanim u njemu tako i za dopunu novim riječima. Nove riječi unesene u njega, ako je potrebno, mogu se izbrisati zajedno sa tijelima koja su s njima povezana naredbom FORGET $PRIME. Nakon toga, mogućnost daljeg dodavanja riječi u ovaj podrečnik je osigurana izvršavanjem naredbe GROW $PRIME, koja vam omogućava da ponovo povećate podriječnik $PRIME, a sve što se u njega unese ponovo se može izbrisati naredbom FORGET $PRIME itd. . U ovom režimu, PRSP se koristi kada se eksperimentiše sa malim fragmentima programa, pojedinačnim primerima, procenama, a takođe, ako je potrebno, za uključivanje novih reči u podrečnik $PRIME po redosledu razvoja sistemskog jezika.

U slučaju kreiranja zasebnog programa, za njega formiraju svoj podrečnik, a to se postiže činjenicom da tekst programa počinje naredbom

PROGRAM$<имя программы>

Osoba doživljava ovu naredbu kao naslov, nakon čega slijedi komentar u uglastim zagradama, koji u nekoliko riječi opisuje funkciju koju implementira program. Za procesor, to je ekvivalentno nizu instrukcija

ZABORAVI$<имя>GROW$<имя>

Stoga će svaki unos teksta programa na ulaz procesora uzrokovati brisanje njegove prethodne verzije i otvoriti na ovaj način očišćeni podrečnik za unos nove verzije programa sa istim imenom. Ovo je zgodno kada pravite ispravke u kreiranom programu, kao i kada ga menjate u budućnosti.

Tekst dizajniranog programa se ne unosi direktno sa tastature na procesorski ulaz, već se formira u baferu uređivača teksta. Naredba E (Edit - edit) postavlja način uređivanja, u kojem se riječi ukucane na tastaturi više ne percipiraju od strane procesora kao naredbe koje treba odmah izvršiti, već se jednostavno upisuju u bafer i istovremeno se prikazuju na tekstu na ekranu. Uz pomoć posebnih tastera koji kontrolišu kretanje indikatora trenutne pozicije (kursor) na ekranu, kao i komandi za uređivanje datih pritiskom na druge tastere, uneseni tekst se može korigovati i menjati brisanjem i umetanjem, pomeranjem njegovih fragmenata. od mjesta do mjesta itd.

Na kraju unosa i uređivanja teksta uređivač se isključuje pritiskom na tipku E istovremeno sa (tačnije, sa prethodno pritisnutim) tipkom , a sistem se prebacuje na glavni način PRSP komande. Slična radnja se pokreće jednostavnim pritiskom na tipku . U ovom režimu, sadržaj uređivačkog bafera se može izvesti u procesor pomoću PF komande (PerForm - execute). U tom slučaju će se izvršiti sve naredbe sadržane u tekstu, a posebno naredba PROGRAM $<имя>će ukloniti podrečnik $<имя>od poslednjeg izvršenja ove komande, imena podataka i procedura, kao i odgovarajućih tela, ponovo otvaraju ovaj podrečnik za rast. Komande deklaracije podataka i naredbe definicije procedure će unijeti imena koja unesu u njih, zajedno sa pokazivačima na podatke označene ovim imenima i tijela procedure sastavljena u skladu s definicijama.

Kada je učitavanje završeno, procedure i podaci su dostupni za referencu po nazivima koji se ukucavaju sa tastature, a moguće je provjeriti ispravnost programa izvršavanjem procedura uzlaznim redoslijedom, tj. počevši od onih čije definicije ne sadrže neprovjerene procedure. Prije nego počnete provjeravati, dobro je provjeriti da vaš program ne koristi nedefinirana imena. Procesor ih prikazuje na ekranu naredbom UNDEF. Da biste dopunili tekst programa definicijama ovih naziva, kao i da biste ispravili druge greške otkrivene tokom procesa verifikacije, pozovite editor sa komandom E i izvršite odgovarajuću modifikaciju izvornog teksta programa koji se nalazi u baferu editora, a zatim prebacite procesor u glavni mod i učitajte sadržaj bafera sa PF komandom.

Nakon provjere i testiranja programa, njegov izvorni kod se može kopirati iz editorovog bafera na disk pomoću OE f komande, gdje je f naziv datoteke u kojoj će program biti zapisan na disk. U budućnosti, sadržaj datoteke se može učitati na procesorski ulaz pomoću naredbe LOAD f, a također se može kopirati u međuspremnik uređivača kao dodatak tekstu koji se u njemu nalazi pomoću IE f naredbe. Podrazumevano, datoteke imaju ekstenziju .DSP. Međuspremnik se može prethodno očistiti pomoću KE naredbe. Također je moguće ispisati sadržaj bafera pomoću LPE naredbe.

Nakon učitavanja programa spremnog za izvršenje, moguće je očistiti $ podrečnik kreiran za njega.<имя>naredba CLEAR $<имя>. Izvršavanjem ove naredbe procesor uklanja nefiksirana imena iz imenovanog podrječnika, tj. sva imena osim onih čijim definicijama prethodi fiksirajući prefiks:: (dvije dvotočke). U ovom slučaju brišu se samo sami nazivi (unosi u rječniku), dok su tijela procedure i podaci povezani s njima sačuvani i dostupni tokom izvršavanja programa putem internih referenci uspostavljenih tokom kompilacije, ali više nisu dostupni izvana. Da biste vratili mogućnost pristupa izvana, na primjer, ako trebate kompajlirati neki dodatak ili promjenu, potrebno je ponovo učitati izvorni kod programa.

Imena se mogu učiniti nedostupnima izvana, bez uklanjanja iz rječnika, naredbom SHUT $<имя>, koji zatvara pristup svim riječima podrečnika koji je u njemu imenovan. Otvaranje podrečnika za korištenje njegovih riječi vrši se naredbom USE $<имя>. Postoji i naredba SAMO $<имя>, koja zatvara sve podrečnike osim imenovanog, i naredbu CANCEL, koja poništava ovo ograničenje. Navedene komande vam omogućavaju da kontrolišete upotrebu rečnika tokom kompilacije i ograničite skup imena dostupnih korisniku programa na potreban minimum.

Pretraživanje imena u rječniku vrši se gledanjem njegovih riječi obrnutim redoslijedom kojim su unesene u rječnik, tj. počevši od posljednjeg unosa. Stoga, za ime definirano više puta u rječniku, najnovija definicija je važeća. Ako je podrečnik koji sadrži ovu poslednju definiciju zatvoren, pretraga se nastavlja do prvog dostupnog unosa rečnika sa datim imenom, a koristiće se definicija specificirana tim unosom.

Nekoliko riječi o unosu i izlazu podataka. Kao što je već spomenuto, procesor pokušava protumačiti riječ izvršenog programa koja se ne nalazi u rječniku kao broj i, ako je uspješan, gura binarni ekvivalent ovog broja na stog. Guranje broja na stog može se obaviti pomoću naredbe TIN, koja zahtijeva upisivanje ulaznog broja na tastaturi. Postoje i komande koje dovode do guranja znaka unesenog sa tastature na stek: TIB - sa displejom, TRB - bez prikazivanja ovog znaka na ekranu. U ovom slučaju, kod karaktera je predstavljen nižim bajtom 32-bitne riječi poslane u stog, od kojih su 3 starije bajta jednaka nuli.

Unos sadržaja vrha hrpe, odnosno, moguć je u obliku broja i u obliku slova. Naredba TON uzrokuje da se numerička vrijednost podčvora prikaže na ekranu u izlaznom polju, čija je širina određena vrhom, u sistemu predstavljanja brojeva koji je uspostavljen u vrijeme njegovog izvršavanja. Komanda TOB prikazuje znak čiji se kod nalazi u nižem bajtu vrha steka. U oba slučaja, izlaz je praćen uklanjanjem argumenata iz steka.

DSSP procesor ima aparat za eksterne i interne (komandne) prekide i obezbeđuje sledeće alate za njihovu obradu. Procedura namijenjena za rukovanje vanjskim prekidom definirana je na isti način kao i normalna procedura, ali s prefiksom INT dodatim prije dvotočka. Ime takve procedure je povezano sa adresom vektora prekida sa naredbom:

<адрес вектора>VEZA<имя процедуры>

Prekid naredbe je imenovana operacija za pozivanje procedure odgovora. Naziv ove operacije određuje naredba TRAP, koja joj pridružuje takozvanu proceduru konačnog odgovora, koja se izvodi ako se konačna reakcija ne zamijeni drugom postupkom odgovora pomoću naredbe ON ili EON. Sve tri naredbe imaju isti format:

TRAP<имя вызова> <процедура реагирования>

ON<имя вызова> <процедура реагирования>

eon<имя вызова> <процедура реагирования>

Procedura mapirana na ime poziva pomoću EON instrukcije se izvršava nakon izlaska iz tijela procedure koja sadrži EON instrukciju i sa vrijednošću pokazivača steka operanda koji je bio na mjestu u vrijeme kada je EON izvršen.

Sintaksa PARA jezika

PARADISE jezička abeceda uključuje latinicu i ruski, mala i velika slova, decimalne cifre, matematičke i druge posebne znakove. Elementi (članovi) abecede nazivaju se slovima. Spoljašnji prikaz slova je njegova štampana slika (štampani znak). Unutar PRSP procesora, svaki ispisani znak je predstavljen bajtom čija je vrijednost binarni kod tog znaka. Transformaciju eksterne reprezentacije u internu i obrnuto vrši ulazno/izlazni uređaj (tastatura, displej, štampač). Radi praktičnosti, numerička vrijednost koda je izražena u decimalnom, heksadecimalnom ili oktalnom sistemu, nazivajući odgovarajući broj decimalnim, heksadecimalnim ili oktalnim znakovnim kodom.

Svi objekti jezika RAJ su izgrađeni od slova i linearni su lanci slova konačne dužine, koji se nazivaju riječima. Označivač za uzastopne riječi je znak koji se ne može ispisati (razmak). Niz razmaka je ekvivalentan jednom razmaku. Osim toga, funkciju separatora riječi obavlja naredba "Idi na početak sljedećeg reda", označena na tastaturi ulaznih uređaja simbolom ili i, zajedno sa slovima, ima internu reprezentaciju kao kodni bajt. Dakle, nema potrebe za odvajanjem razmaka na početku i na kraju niza.

Primjer riječi: CLEAR NOP STEK2 & 1+ -366 X sonda.

PRSP procesor razlikuje riječi po prvih sedam slova, prepoznajući ih politerminalnim poređenjem sa riječima u svom rječniku. Rječnik sadrži riječi koje su nazivi (oznake) vlastitih operacija procesora, koje se nazivaju osnovnim operacijama ili primitivima, i mogu se dopuniti imenima objekata (podataka, procedura) koje definira korisnik. Dakle, riječi sadržane u rječniku su ili imena akcija (operacija, procedura) ili imena podataka (konstante, varijable, nizovi).

Kada prepoznatljiva riječ nije u rječniku, procesor pokušava da je dodijeli jednom od sljedećih slučajeva:

    numerički literal, tj. niz cifara, koji možda počinje sa znakom minus, na primjer: 0, 4096, -25;

    literalni literal: riječ koja počinje znakom #, što uzrokuje da procesor primi kao dati kod znak koji odmah slijedi, na primjer: #A - literal velikog latiničnog slova A, #5 - literal broja 5 , # - razmak literal, ## - literalna slova #;

    literal teksta: proizvoljan tekst zatvoren u dvostruke navodnike i odvojen separatorima riječi, na primjer: "Tekst", "Ulazni fajl N3";

    naredba za izdavanje tekstualne poruke na displeju: tekst izlazne poruke, s lijeve strane omeđen kombinacijom znakova tačka-dupli navodnik i na desnoj strani dvostruki navodnik i razdvojen separatorima riječi, na primjer: "Stog je prazan";

    komentar: proizvoljan tekst zatvoren u uglastim zagradama i odvojen graničnicima, na primjer: .

Literali i naredba za ispisivanje poruke na displeju djeluju kao objekti PRSP jezika uz riječi koje su prepoznate iz rječnika, dok se komentari u PRSP procesoru potpuno zanemaruju - namijenjeni su osobi, a ne mašini. Ako se riječ ne nalazi u rječniku i nije povezana s navedenim konstrukcijama, procesor izdaje poruku: "Ne znam<неопознанное слово>".

S obzirom na posebno značenje dato slovima #, "i kombinacija." na početku riječi, tj. iza separatora, kao i slovo " ispred separatora, ne smiju se koristiti na navedenim pozicijama u riječima definisanim za uključivanje u rečnik.

Niz riječi na ulazu procesora tumači se kao niz instrukcija koje izvršava procesor. Postoje tri vrste riječi:

1) obavlja samostalno, tj. predstavljanje naredbi od jedne riječi (monoriječi);

2) izvedeno u sprezi sa jednom ili više narednih riječi, tj. koje su početne riječi (prefiksi) naredbi od dvije, tri ili više riječi;

3) prethodna naredbi kao pojašnjenje ili indikacija posebnog načina izvršavanja (prefiksi).

Monoriječi uključuju literale, imena podataka, većinu I/O, testova i operacija konverzije podataka na steku i korisnički definirane procedure. Na primjer: 1987 - numerički literal, #5 - literal cifre 5, "Lista shema" - tekstualni literal, LENGTH - naziv varijable, TOB, NEG, +, &,<, = - имена (обозначения) операций, SORT, CONVERT, ЧИСТКА, СНЯТЬ - имена процедур пользователя.

Prefiksi su svojstveni komandama za opisivanje podataka i definisanje procedura, kao i za manipulaciju imenovanim podacima, uslovno i višestruko izvršavanje procedura i upravljanje rečnikom. Primjeri naredbi sa prefiksima:

VAR SUM - kreiranje varijable SUM,

: ODD [x] 1 & ; - kreirati ODD proceduru koja zamjenjuje neparan broj sa 1, paran broj sa 0,

0 X - dodijeliti vrijednost 0 varijabli X,

BR+ P1 P2 - ako je vrijednost njegovog vrha uzeta iz steka pozitivna, onda izvršiti P1, u suprotnom izvršiti P2,

RP CHECK - izvršite CHECK proceduru iznova i iznova,

KORISTI $REAL - otvori $REAL podrečnik za upotrebu.

Po pravilu, određeni prefiks zahtijeva određeni broj riječi iza sebe. Stoga, u upravo navedenim primjerima, prefiksi VAR, !0 i USE zahtijevaju po jednu riječ, dok prefiks BR+ zahtijeva dvije riječi. Međutim, prefiks: (dvotočka) vam omogućava da formirate naredbu proizvoljne dužine, počevši od tri riječi. Kraj naredbe je riječ; (tačka-zarez). Proizvoljna dužina je takođe karakteristična za naredbu-deskriptor konstanti CNST A1 ... AJ ; i naredba višestrukog odabira procedure BR A1 P1 ... AJ PJ ELSE PN.

Prefiksi su posebne riječi koje, kada se dodaju na početak naredbe, mijenjaju njen sadržaj ili definiraju poseban način izvršenja. Na primjer, naredba VAR X bez prefiksa je instrukcija za kreiranje 16-bitne varijable X. Ako joj dodamo BYTE prefiks, dobijamo naredbu BYTE VAR X, koja daje upute za kreiranje 8-bitne varijabla (bajt) sa imenom X. Ako koristimo LONG prefiks, onda dobijamo LONG VAR X - instrukciju za kreiranje 32-bitne varijable pod nazivom X.

Prefiks drugog tipa, naime:: (dvije dvotočke) govori o stabilnosti rezultata izvršenja naredbe u odnosu na proceduru CLEAR, koja uklanja slobodne riječi iz rječnika. Imena koja su unesena u rečnik tokom izgradnje programa naredbama za opis podataka i definiciju procedure, nakon što je program kreiran i testiran, mogu se ukloniti iz rečnika, sa izuzetkom nekoliko neophodnih za održavanje gotovog programa. Brisanje se vrši naredbom CLEAR $<имя подсловаря>, navodeći da se obriše podrečnik povezan sa programom, čuvajući u njemu samo one reči u čije definicije sadrže prefiks::. Primjeri naredbi koje generiraju riječi koje se ne mogu ukloniti:

:: BYTE CNST LITCODE # #0 #A ;

:: : MOD / [cilj(a,b),odmor(a,b)] E2 D [odmor(a,b)] ;

Kao što pokazuje drugi primjer koji sadrži prefikse :: i BYTE, u naredbi može biti više od jednog prefiksa.

Dakle, naredba u DSSP-u može biti ili jedna riječ (monoriječ) ili fraza (fraza) koja počinje prefiksom i sadrži broj riječi postavljenih za ovaj prefiks, a ako prefiks dozvoljava proizvoljan broj riječi, onda ima riječ za razdvajanje na kraju ili može biti fraza sa posebnim prefiksnim riječima.

Osnovni jezik DSSP-a ne sadrži složenije sintaksičke konstrukcije od naredbe i ne sadrži nikakve druge konstrukcije osim onih o kojima se raspravljalo gore. Čak i takve neophodne stvari u programskim jezicima, kao što su izraz i funkcija, nedostaju u osnovnom jeziku i mogu se uvesti, ako je potrebno, samo u toku njegovog razvoja.

Program na osnovnom jeziku je jednostavno kolekcija naredbi koje se izvršavaju redoslijedom kojim se pojavljuju u tekstu. Štaviše, svaka naredba, osim onih koje sadrže samo primitive, u procesu svog izvršavanja uključuje niz naredbi koje definiraju riječi koje su u njoj uključene. Uključene naredbe mogu zauzvrat sadržavati riječi koje označavaju lance naredbi, koje također mogu sadržavati riječi koje se odnose na njihove povezane lance, itd. do nivoa gde komande sadrže samo primitive.

Opšti opis jezika PARA, koji je činio sadržaj ovog poglavlja, posvećen je karakterizaciji strukture ovog jezika i osnovnog (početnog) skupa njegovih naredbi, a to je skup ugrađenih naredbi (primitiva) PRSP procesora. Dalji razvoj jezika i odgovarajuće povećanje mogućnosti procesora vrši se uvođenjem novih procedura, komandi, formata i tipova podataka, konstruisanih korišćenjem osnovnih alata. Takav razvoj je po pravilu problemski orijentisan po prirodi i odvija se u obliku paketa procedura učitanih na ulaz procesora pored osnovnog sistema.

S druge strane, osnovni sistem se može dopuniti specijalnim alatima implementiranim na njegovoj osnovi za povećanje mašinske efikasnosti DSSP programa. Ovi alati uključuju mogućnost definisanja pojedinačnih procedura direktno u komandnom kodu mašine koja se koristi. Način na koji je procedura definisana nema uticaja na njenu dalju upotrebu: nazivi svih procedura se unose u zajednički rečnik i potpuno su jednaki. Brojni bibliotečki programi vam omogućavaju da koristite procedure ili čitave programe napisane na drugim jezicima.

Opis operacija i komandi

Operacije koje se izvode na steku

Stog operanda je jedan od glavnih elemenata arhitekture PRSP procesora. Većina instrukcija procesora koristi stek, trošeći operande koji su im potrebni iz njega i šaljući mu rezultate. Interpretacija podataka na steku zavisi od suštine problema koji se rešava, odnosno, u krajnjoj liniji, odgovornost je programera. Zbog činjenice da vrijednost koja je dospjela u stek zapravo gubi ime, teško je iz teksta programa utvrditi na koje operande se primjenjuje ova ili ona operacija, kakvi su njeni rezultati. Stoga, da bi se eksplicitno označili operandi i rezultati procedura u PARA jeziku, koriste se komentari. U ovom slučaju nije potrebno (i nije uvijek moguće) opisati cijeli sadržaj steka. Komentarisanje gornjeg dijela steka, na koji utječe procedura koja se na njemu izvodi, je apsolutno neophodna, jer se bez toga gubi vidljivost programa, a otežana je i njegova provjera.

Da bi se postigla jednoobraznost programa, ove komentare treba pisati s nekoliko jednostavnih pravila na umu. Kao i svaki komentar, opis podataka na steku je zatvoren u uglastim zagradama. Ovaj opis je lista operanada koji se nalaze na steku u datoj tački programa. Svaki element liste karakteriše sadržaj jedne pozicije steka, a kao separator se koristi zarez. Vrijednosti pozicije steka su navedene s lijeva na desno, počevši od najdubljeg elementa i završavajući na vrhu hrpe. Opis jednog operanda može biti broj, ime, izraz ili bilo koja druga značajna notacija koja objašnjava značenje vrijednosti na steku. Ponekad možete odrediti nekoliko mogućih vrijednosti za određenu poziciju steka. U ovom slučaju, vrijednosti su navedene odvojene kosom crtom.

Evo primjera komentara koji odražava stanje steka operanda:

[počni dr,N+1,1/0]

Na tački u programu u kojoj se nalazi ovaj komentar, stog operanda mora sadržavati najmanje tri pozicije, a na vrhu može biti 1 ili 0, na dnu - numerička vrijednost jednaka N + 1, a ispod nje - nešto broj interpretiran kao početna adresa.

Radi praktičnosti specificiranja tražene pozicije steka, koristićemo koncept dubine pojavljivanja. Pretpostavićemo da je vrh hrpe na dubini 1, dno na dubini 2, itd. Konkretno, vrijednost označena u primjeru kao "start.adr." leži na dubini 3.

Započećemo naše proučavanje osnovnog PRSP jezika sa uputstvima za ubacivanje vrednosti na stog. Najjednostavnija (i najčešće korišćena) naredba ovog tipa je numerički literal, to jest, eksplicitna indikacija konstante koja se ubacuje u stek. Neka, na primjer, želimo da u snop gurnemo brojeve 28, -5 i 11. Da biste to učinili, unesite red s tastature:

28 -5 11 i pritisnite tipku (povrat kočije). Procesor prepoznaje unesene brojeve i gura ih redom na stek, tako da će na vrhu biti 11. Da biste to provjerili, dovoljno je ispisati vrijednost vrha steka na ekranu ekrana. Za to se koristi DSSP komanda sa imenom. (tačka). Ukucavanjem slova "tačka" na tastaturi i pritiskom , dobijamo odgovor na ekranu: 11, što odgovara posljednjoj vrijednosti poslanoj u stog. Ponovno izvršavanje "tačke" ima isti rezultat - ova komanda samo prikazuje vrh bez promjene stanja steka.

Da bi prikazao ceo sadržaj steka na ekranu, DSSP ima komandu .. (dve tačke). Nakon što ga izvršimo, na ekranu ćemo dobiti sljedeći red:

Kao što vidite, obrazac za ispis slijedi prihvaćene konvencije za komentarisanje stanja steka (osim što se umjesto zareza koristi razmak). Komanda .. ne mijenja sadržaj steka.

32-bitna riječ (4 bajta) se koristi za predstavljanje jedne pozicije steka u memoriji mašine, brojevi su predstavljeni u komplementu dva. U skladu s tim, PRSP procesor može ispravno percipirati samo cijele brojeve u rasponu od -2147483648 do 2147483647. Ako uneseni broj nije predstavljen u 32 bita (uzimajući u obzir predznak), tada se odbacuju najznačajniji bitovi koji se ne uklapaju.

U razmatranim primjerima pretpostavljeno je da je PRSP procesor u režimu decimalnog unosa/izlaza brojeva. Za podešavanje ovog načina rada na jeziku PARADISE postoji komanda B10.

U mnogim zadacima potrebno je interpretirati obrađene podatke ne kao brojeve, već kao binarne kodove, odnosno 32-komponentne bitne vektore. U DSSP-u je moguće raditi sa kodovima predstavljenim u binarnom, oktalnom ili heksadecimalnom brojevnom sistemu. Za podešavanje željenog režima dovoljno je izvršiti jednu od tri komande: B2, B8 ili B16, nakon čega će procesor prihvatiti i ispisati sve unete kodove u navedenom brojevnom sistemu.

Ova funkcija se može koristiti za pretvaranje decimalnih brojeva u baze 2, 8 i 16. Na primjer, da biste pretvorili broj 29, unesite i izvršite sljedeći red:

B10 29 B2 . B8. B16. Kao rezultat toga, procesor će prikazati niz brojeva na ekranu: 00000000035 0000001D koji su prikazi decimalnog broja 29 u tri navedena brojevna sistema. Imajte na umu da su kodovi ispisani u svom strojnom prikazu, tj. sa vodećim nulama i bez znakova "+", "-". Prilikom izvršavanja linije B10 -2 B8 . će vratiti broj 37777777776, koji je oktalni prikaz komplementa -2.

Kada radite sa heksadecimalnim kodovima, može doći do kolizije između numeričkih literala i imena naredbi PRSP procesora. Na primjer, riječ B8 u heksadecimalnom I/O načinu može se tumačiti kao naredba za postavljanje oktalnog načina rada i kao heksadecimalna konstanta. Da bi se izbjegla dvosmislenost, numerički literali bi trebali početi s ne-značajnom nulom, kao što je 0B8.

Osnovu komandnog sistema DSSP procesora čine operacije transformacije podataka koje se nalaze u steku. Opće pravilo koje reguliše ove operacije je da svaka operacija troši (uklanja) operande koje zahtijeva iz steka i gura vrijednosti rezultata (ako ih ima) na njihovo mjesto.

Razmotrimo instrukcije procesora koje implementiraju četiri aritmetičke operacije: sabiranje, oduzimanje, množenje i dijeljenje cijelih brojeva. Za njihovu sliku na jeziku RAJA koriste se sljedeće riječi: +, -, * i /, respektivno. Da biste dobili zbir dva broja na steku, na primjer 123 i 45, trebate ove brojeve gurnuti na stog i izvršiti naredbu +. Da biste to učinili, samo unesite sljedeći red s tastature (pod pretpostavkom da je podešen decimalni način unosa/izlaza):

123 45 +

Ako sada prikažemo sadržaj steka na ekranu (koristeći naredbu ..), tada će rezultat dodavanja postati vidljiv:

Komutativna operacija množenja radi na sličan način.

Prilikom izvođenja nekomutativnih operacija oduzimanja i dijeljenja, podvrh steka se uzima kao minuend (dividenda), a vrh se koristi kao subtrahend (djelitelj). Na primjer, da biste izračunali razliku 151-68, trebate izvršiti liniju:

151 68 -

Program za izvođenje aritmetičke operacije na jeziku PARA karakteriše činjenica da se operacija nalazi iza operanada koji joj odgovaraju. Takva notacija aritmetičkih izraza naziva se postfiksna (ili poljska inverzna) notacija i široko se koristi u kalkulatorima steka. Neka, na primjer, trebamo izračunati vrijednost aritmetičkog izraza ((127+81)*15-(31+117)*21)*3

U postfiksnoj notaciji, ovaj izraz će izgledati ovako:

127 81 + 15 * 31 117 + 21 * - 3 *

Ovaj red (u kojem su riječi odvojene jedna od druge razmacima) je gotov program za izračunavanje našeg izraza pomoću PRSP procesora.

Podjela/komanda se razlikuje od ostalih aritmetičkih operacija po tome što rezultira dvije vrijednosti - količnik i ostatak. Kvocijent je na dnu steka, a ostatak na vrhu. Količnik je negativan ako dividenda i djelitelj imaju različite predznake. Ostatak uvijek ima predznak dividende. Evo nekoliko primjera korištenja naredbe dijeljenja.

125 7 / [-17,-6] / / /

Prilikom izvođenja proračuna može doći do pogrešnih situacija: prelijevanje i dijeljenje nulom. DSSP procesor na njih ne reaguje ni na koji način (posebno, kada se deli sa nulom, sadržaj steka se ne menja), a kontrola nad ispravnim korišćenjem operacija je dodeljena programatoru.

Prilikom programiranja često je potrebno povećati ili smanjiti vrijednost vrijednosti za 1 i 2. U jezik PARADISE uvedene su posebne komande koje izvršavaju određene radnje na vrhu steka. Označeni su riječima: 1+, 1-, 2+, 2-. Izvršavanje ovih naredbi je ekvivalentno guranju željene konstante (1 ili 2) na stog, nakon čega slijedi izvođenje potrebne aritmetičke operacije (+ ili -). Na primjer, 2+ je ekvivalentno paru riječi 2 +. Uvod u jezik ovih komandi je uzrokovan razmatranjima efikasnosti.

Takođe, radi poboljšanja efikasnosti, osnovni jezik DSSPprocesora ima komande T0 i T1, koje zamenjuju vrednost vrha steka sa 0 i 1, respektivno, bez obzira na to koja je vrednost bila na vrhu pre navedene komande. primjeri:

Komande NEG, ABS i SGN su takođe dizajnirane za rad sa numeričkim podacima. NEG instrukcija obrće predznak vrha steka, ABS zamjenjuje vrijednost vrha steka njegovom apsolutnom vrijednošću, SGN - konzumira numeričku vrijednost s vrha steka i stavlja znak ekstrahovanog broja u svoj mjesto: -1 - ako je broj negativan, 1 - ako je pozitivan, 0 - ako je jednak nuli. Na primjer:

5 NEG [-5] ABS SGN

Naredbe MIN i MAX u osnovnom jeziku omogućavaju vam da pronađete minimum i maksimum od dva cijela broja. Operandi za ove instrukcije su dva broja na vrhu i dnu steka. Instrukcija MIN ostavlja minimalni broj parametara na steku, MAX maksimalni od njih. Na primjer:

5 0 15 MIN [-5,0] MAX

Da biste pronašli minimum (maksimum) od tri broja na stogu, dovoljno je dvaput primijeniti naredbu MIN (MAX):

MIN MIN [-2]

SEG instrukcija za provjeru da li broj koji se nalazi na vrhu hrpe pada unutar specificiranog raspona od a do b (uključujući granice) ostavlja sljedeću zastavicu na steku kao rezultat: 1 ako je broj u rasponu i 0 ako nije:

SEG [znak] na primjer:

Pored instrukcija za rad sa numeričkim podacima, skup instrukcija za DSSP procesor uključuje niz operacija dizajniranih za konverziju 32-bitnih kodova. Ove operacije tretiraju element steka kao 32-komponentni vektor bitova, čije su komponente numerisane s desna na lijevo na način da je krajnji lijevi bit broj 31, a krajnji desni broj 0. Opadajuće numeriranje komponenti se ponavlja numerisanje bitova mašinske reči usvojeno za mnoge mikroprocesore.

Instrukcije bit-vektora prvenstveno uključuju operacije po bitovima Booleove algebre:

    inverzija vrha INV steka po bitu, mijenjanje vrijednosti svakog bita vrha, tj. zamjena 0 sa 1 i 1 sa 0;

    bitova konjunkcija vrha i dna steka &, postavljajući i-ti bit rezultata, i=31,30,...,0, na 1 ako su i-ti bitovi oba operanda 1, i inače postavljanje i-tog bita na 0;

    bitova disjunkcija vrha i dna steka &0, postavljajući i-ti bit rezultata, i=31,30,...,0, na 0 ako su i-ti bitovi oba operanda 0, i inače postavljanje i-tog bita na 1;

    bitovsko zbrajanje (neekvivalentnost) "+" gornjeg i donjeg, postavljanje i-og bita rezultata na 0 ako i-ti bit oba operanda imaju iste vrijednosti, i postavljanje i-tog bita rezultata rezultat je 1 ako se vrijednosti i-tih bitova operanada razlikuju.

525 INV 722 & 136 &0 325 "+"

Bitova konjunkcija se često koristi za resetovanje (brisanje) bitova reči. Da biste to učinili, originalna riječ se kombinira s maskom koja sadrži nule u onim bitovima koje treba obrisati i jedinice u preostalim bitovima. Na primjer, ako trebate resetirati bitove 3 do 5 u nekoj riječi X, potrebno je izvršiti njenu bitnu konjukciju sa maskom 37777777707. Za X=235 dobijamo:

Bitova disjunkcija se može koristiti za umetanje željene kombinacije bitova u prethodno obrisanu grupu bitova riječi. Neka, na primjer, trebate staviti binarnu kombinaciju 010 u bitove 3 do 5 riječi koja je ostala na steku kao rezultat posljednjeg primjera. Ovo se može uraditi ovako:

Operacije manipulacije bitovima također uključuju instrukcije logičkog pomaka:

    levi pomak SHL - svaki bit vrha steka, počevši od 31., uzima vrijednost onog koji slijedi u opadajućem redoslijedu brojeva, a posljednji, nulti bit uzima vrijednost 0;

    desni pomak SHR - svaki bit vrha steka, počevši od 0, uzima vrijednost sljedećeg u rastućem redoslijedu brojeva, a 31. bit uzima vrijednost 0;

    gornji pomak SHT - gornji element se uklanja iz steka i smatra cijelim brojem N, što pokazuje koliko pomaka i u kom smjeru treba napraviti na vrhu hrpe: kada je N>0, vrši se pomak ulijevo, kada je N<0 - вправо.

B8 125 SHR SHL -2 SHT

Operacije lijevog pomaka mogu se koristiti za množenje brojeva sa 2 na stepen N, gdje je N prirodan broj koji određuje broj pomaka. Na primjer, množenje broja -5 sa 8 može se uraditi pomicanjem ovog broja za 3 znamenke ulijevo:

B10 -5 3 SHT [-40]

U tom slučaju treba uzeti u obzir mogućnost prelivanja.

Desni pomak se može koristiti kao operacija dijeljenja cijelog broja sa 2 na stepen N samo za pozitivne brojeve, pošto je najznačajniji (znak) bit postavljen na nulu tokom desnih pomaka. Na primjer:

dok

Rotirajte vrh steka za 1 bit udesno ROR i lijevi ROL su slični instrukcijama logičkog pomaka, osim što rubni bit koji je istisnut ne nestaje, već se gura u oslobođeni prostor sa suprotnog kraja 32 -malo duga reč. Na primjer (heksadecimalni brojevi):

Naredbe DSSP procesora SWB i SWW su također namijenjene za obradu binarnih kodova. SWB funkcija je zamjena bajtova donje polovine vrha steka, a SWW funkcija je zamjena polovica vrha steka. Ilustrujmo kako ove naredbe funkcionišu koristeći heksadecimalni I/O mod (u ovom načinu, svaki bajt je predstavljen sa dvije heksadecimalne cifre):

B16 0ABCD SWB SWB

0ABCDEF12 SWW SWB

Komande za manipulaciju stekom igraju važnu ulogu u PARA jeziku. Oni ne mijenjaju vrijednosti podataka na steku, već samo mijenjaju njihovu lokaciju, olakšavajući pristup operandima koji su duboko u steku.

Postoje tri komande za uklanjanje elemenata steka: D, DD, DS (Ispusti - odbaci). Komanda D uklanja jedan (gornji) element iz steka, DD - dva elementa, na primjer:

D DD D DS uklanja sve elemente iz steka (čisti stek):

Naredba za kopiranje vrha steka C (Copy) gura kopiju trenutne vrijednosti njegovog vrha na stek. Ovo je ekvivalentno dupliranju gornjeg elementa steka: stari vrh postaje podvrh, a njegova kopija postaje novi vrh. primjer:

Prikazaćemo primjenu ove naredbe na primjeru izračunavanja polinoma p(x)=3*x**2+4*x-5 prema Hornerovoj šemi: p(x)=(3*x+4)* x-5. Pretpostavljamo da se vrijednost x nalazi na vrhu steka.

[x] C 3 * 4 + * 5 -

Uz naredbu za kopiranje vrha steka na jeziku PARADISE, postoje i naredbe C2, C3, C4, koje kopiraju elemente koji se nalaze na dubini od 2, 3, 4. Njihov rad se može objasniti sljedećim primjerima:

C2 C4

Postoji i CT naredba za kopiranje elementa na dubini specificiranoj na vrhu steka. Prilikom izvršavanja CT-a, procesor uklanja gornji element iz steka, koristi njegovu vrijednost kao indikator dubine kopiranog elementa i gura kopiju posljednjeg elementa na stek. Dakle, kopiranje elementa koji se nalazi na dubini od 5 specificira se parom od 5 CT instrukcija, izvršavajući koje, procesor će gurnuti broj 5 na stek, a zatim izvršiti CT instrukciju. Izvršenje CT sa parametrima 1, 2, 3, 4 je ekvivalentno naredbama C, C2, C3, C4 respektivno.

Naredbe za razmjenu E2, E3, E4 (Razmjena - razmjena) permutiraju prvi (gornji) element steka, respektivno, sa 2., 3., 4., odnosno sa elementom koji se nalazi na dubini od 2, 3, 4. Na primjer:

E3 E2

Za razmjenu na većim dubinama koristi se instrukcija ET, koja, kao i CT, koristi vrijednost vrha steka kao indikator dubine elementa koji se razmjenjuje sa prvim elementom. Na primjer:

5ET

Naredba ET sa parametrima 2, 3, 4 je ekvivalentna naredbama E2, E3, E4.

Da biste ilustrirali upotrebu naredbi za kopiranje i razmjenu, razmotrite problem obuke. Na hrpi su tri broja. Potrebno za ulazak na stog: . Možemo predložiti sljedeći program čije je značenje jasno iz komentara.

C3 C3 C3+

E4+E4

Ovaj primjer dobro pokazuje koliko je velika uloga komentara, koji odražava stanje steka operanda.

Programi često moraju međusobno uspoređivati ​​numeričke vrijednosti i izvoditi različite postupke ovisno o rezultatima poređenja. Jezik RAYA ima komande za poređenje<, =, >. Definirani su preko brojeva i kao rezultat proizvode numeričke vrijednosti 0 i 1. Dakle, naredba< потребляет из стека два элемента и засылает в стек число 1, если значение нижнего элемента оказалось меньше значения верхнего, а в противном случае засылает 0. Например, в результате выполнения последовательности 5 -20 < в стек будет заслан 0. Команда = засылает 1 в случае равенства потребленных ею элементов. Команда >šalje 1 kada je donji element veći od gornjeg elementa. Za programiranje nestrogih poređenja (manje ili jednako, veće ili jednako), koristi se naredba NOT, koja zamjenjuje vrijednost vrha steka koji nije jednak nuli sa nulom, a jednak nuli sa jedan. Na primjer, procjena logičkog izraza x>=5, gdje je x neki broj na vrhu steka, može se specificirati na sljedeći način:

[x]5< NOT

Dalje proširenje mogućnosti programskih uslova obezbjeđuje se upotrebom, uz naredbe za poređenje, logičkih operacija konjunkcije & (logičko I) i disjunkcije &0 (logičko ILI). Neka je, na primjer, potrebno dobiti 1 na steku ako broj x na vrhu pripada polusegmentu C 5< NOT C2 10 <

& E2 2 = &0

O alatima za upravljanje programom u zavisnosti od rezultata poređenja biće reči kasnije.

Definicija procedura

Kao osnovna tehnika programiranja, PRSP pruža korisniku mogućnost da definira imenovane sekvence operacija koje se nazivaju procedure. Neka je potrebno, na primjer, izračunati vrijednosti kvadratnog trinoma 3*x**2-4*x+9 za date x vrijednosti. U ovom slučaju, trebali biste definirati proceduru koja implementira trinomsku formulu i ispisati rezultat na terminal, a zatim primijeniti ovu proceduru na određene x vrijednosti. Željena procedura, nazovimo je PX, definirana je na sljedeći način: : PX [x] C 3 * 4 - * 9 + . D; Dvotačka znači operaciju "definiraj proceduru", s imenom procedure koja slijedi nakon razmaka za razdvajanje. Definirajući niz naredbi (tijelo procedure) slijedi ime procedure i završava se tačkom i zarezom. Ukratko, procedura je definisana u obliku:

: <имя процедуры> <тело процедуры> ;

U jeziku PARADISE, potrebno je komentirati stanje steka operanda na početku i na kraju procedure. U telu procedure, komentari se postavljaju prema diskreciji programera na mestima koja su teško razumljiva.

Komentari pomažu čovjeku da razumije i koristi proceduru, dok procesor jednostavno ignoriše sve što je navedeno u zagradama. Stoga, prilikom unosa definicije jedne procedure sa terminala, komentari se mogu izostaviti.

Nakon što se unese definicija procedure i pritiskom na tipku procesor je obaviješten o kraju unosa, na ekranu terminala se pojavljuje zvjezdica, signalizirajući izvršenje komande "defini procedure" i spremnost procesora da nastavi dijalog. Sada možete primijeniti PX proceduru na vrijednosti x specificirane na tastaturi, na primjer, na 2, 3, 4 (podvučeno je koje izdaje procesor):

*2PX 13

*3PX 24

*4PX 41

Hajde da definišemo opštiju proceduru za izračunavanje trinoma oblika a2*x**2+a1*x+a0, koja nam omogućava da postavimo vrednosti i x i a0, a1, a2. Nazovimo to PXA:

: PXA C E4 E3 * + * + ;

Kada koristite PXA, vrijednosti a0, a1, a2, x moraju biti u traženom nizu na steku. Na primjer: a0=1, a1=2, a2=-3, x=4

* 1 2 -3 4 PXA . D -39

U tijelu procedure, uz osnovne operacije procesora, mogu postojati procedure koje definira korisnik. Na primjer, možete definirati proceduru P koja će, pored kalkulacija koje izvodi PXA, izdati kopiju rezultata terminalu i ukloniti rezultat iz steka.

:PXA. D;

Konkretno, tijelo procedure može uključivati ​​naziv procedure koja se definira, odnosno, procedura može biti rekurzivna. Na primjer:

: VRIJEME [t] 1- VRIJEME ;

Ova procedura smanjuje vrijednost vrha steka za 1 i ponovo se odnosi na sebe, tj. radi kao brojač vremena.

Brojač VREMENA u principu ne može stati: oduzimanje jedinice će se izvoditi iznova i iznova dok procesor radi. Ali u DSSP-u postoje alati koji vam omogućavaju da kontrolišete tok procesa u zavisnosti od dobijenih rezultata - operacije upravljanja tokom programa.

Uslovno izvršenje i ponavljanje

Program, koji je niz naredbi koje se izvršavaju redoslijedom kojim se nalaze jedna za drugom u svom zapisu, naziva se linearnim. Da bi program bio lako vidljiv (čitljiv) i razumljiv, podijeljen je na imenovane dijelove koji imaju određeno značenje - procedure, od kojih je svaka definirana svojim nizom procedura, koje su pak definirane nizovima manjih procedura itd. na procedure definisane direktno sekvencama PRSP naredbi. Takav program, napisan kao hijerarhija definicija procedura, naziva se strukturiranim. Metoda konstruisanja strukturiranog programa, koja se sastoji u postepenoj dekompoziciji problema koji se rješava na sve manje i manje podzadatke, naziva se strukturirano programiranje.

Kreiranje metodom strukturiranog programiranja ne samo linearnih, već i bilo kakvih programa moguće je uz prisustvo operacija izvršavanja procedure prema uslovu, ponavljanja procedure i izlaska iz ponovljene procedure. Skup komandi ove vrste dostupan u DSSP-u pruža mogućnost strukturirane konstrukcije proizvoljnog programa.

Uslovi za izvršenje ili neizvršenje procedure formulišu se u odnosu na predznak broja, tačnije u odnosu na predznak vrednosti koju trenutno ima vrh steka. Glavna komanda za uslovno izvršavanje procedure - BRS (BRanch on Sign - grana po znak) upućuje da se izvrši jedna od tri procedure nazvane po BRS, u zavisnosti od predznaka trenutne vrednosti vrha steka. Prilikom izvršavanja BRS-a, procesor uklanja gornji element iz steka, testira njegovu vrijednost, a ako je negativan, izvršava prvu od gore navedenih procedura, ako je nula, onda drugu, a ako je pozitivan, onda treću. Dakle tim

će uzrokovati da se jedan element ukloni iz steka i izvrši proceduru N ako je uklonjena vrijednost negativna, izvrši proceduru P ako je pozitivna i izvrši proceduru Z ako je jednaka nuli.

Primjer upotrebe naredbe BRS je sljedeća definicija procedure SGN

: SGN [X] BRS -1 0 1 ;

Ova rutina zamjenjuje vrijednost X na vrhu steka sa -1 ako je X<0, числом 0, если X=0, и числом 1, если X>0. SGN procedura je dostupna u PRSP-u kao osnovna operacija procesora.

BRS komanda, uz izbor jedne procedure od tri podatka, daje mogućnost implementacije dvovrijednih operatora oblika IF-THEN i IF-THEN-ELSE . Na primjer, izjava ako je x>0 onda P1 else P0 odgovara naredbi BRS P0 P0 P1, a izjava ako je x<>0 zatim P - naredba BRS P NOP P, gdje je NOP naziv prazne operacije. Ali u DSSP-u postoji efikasnija implementacija dvovrijednih uslova - naredbe IF-, IF0, IF+, BR-, BR0, BR+.

Grupne komande IF odgovaraju naredbi IF-THEN. Na primjer, IF-P naredba upućuje da se gornji element ukloni iz steka i testira njegov predznak, a ako ovaj element ima znak minus, onda se izvrši procedura P. Naredbe IF0 P i IF+ P nalažu da se izvrši procedura P , odnosno u slučaju kada je uklonjeni element nula, a kada je njegova vrijednost pozitivna.

Kao primjer koji ilustruje upotrebu komandi IF grupe, daćemo definiciju komande ABS osnovnog jezika koja izračunava modul vrha steka.

: ABS [X] C IF-NEG [|X|] ;

Naredbe BR-, BR0 i BR+ odgovaraju naredbi IF-THEN-ELSE, upućujući vas da odaberete jednu od dvije procedure pozvane nakon njih. Ako se znak uklonjenog elementa iz steka poklapa sa onim u oznaci naredbe, tada se izvršava prva procedura imenovana, a ako se ne poklapa, onda se izvršava druga procedura. Na primjer, naredba BR0 P0 P1 upućuje da se izvrši procedura P0 u slučaju kada je element uklonjen iz steka nula, a ako ovaj uvjet nije zadovoljen, onda se izvrši procedura P1.

Razmatrane komande vam omogućavaju da ekonomično programirate izvođenje procedure u zavisnosti od datih uslova. Najčešći uslovi oblika x<0, x=0, x>0 se direktno implementiraju komandama IF grupe. Uslovi x<=0, x<>0, x>=0 se programiraju korištenjem BR-, BR0, BR+ instrukcija korištenjem prazne NOP operacije kao prve procedure. Na primjer, rečenica if x<=0 then P соответствует команда BR+ NOP P. Примером использования команд группы BR может служить следующая реализация команды базового языка NOT, заменяющей нулевое значение вершины стека единицей, а ненулевое - нулем.

: NIJE [x] BR0 1 0 ;

Grananje programa se često vrši nakon naredbi za poređenje (<, =, >) koji proizvode logičku vrijednost 1 ili 0 ovisno o rezultatu poređenja dva broja. Naredba osnovnog jezika MAX, na primjer, može se programirati na sljedeći način:

: MAX C2 C2< IF+ E2 D ;

Grupa instrukcija grananja uključuje i instrukciju za odabir BR, koja se piše kao:

BR A1 P1 A2 P2 ... AK PK ... AN PN OSTALO P0

Prilikom implementacije ove instrukcije, procesor prvo izvršava pokazivačku proceduru A1 i upoređuje vrijednost koju je ubacio na stek sa vrijednošću prethodnog vrha steka ispod njega. Ako se vrijednosti poklapaju, tada se gornja dva elementa uklanjaju iz steka i izvršava se procedura P1 povezana s pokazivačem A1, nakon čega se vrši prijelaz na instrukciju koja slijedi instrukciju BR (tj. u gornjem unosu, program nakon riječi P0 u tekstu). Ako se upoređene vrijednosti ne podudaraju, tada se jedan gornji element uklanja iz hrpe (tj. rezultat A1) i iste se radnje izvode s parom A2 P2, a zatim, ako se podudaranje nije uspjelo, tada sa parom A3 P3, itd. do AN PN uključujući. U slučaju kada nijedan od pokušaja nije dao podudaranje, izvršava se procedura P0 nazvana po riječi ELSE. Obično se numeričke konstante ponašaju kao procedure pokazivača, na primjer:

[x] C BR 5 NEG -3 ABS 0 NIJE DRUGO T0 [y]

Kao rezultat izvršavanja ove linije, vrijednost y=-5 će se dobiti na vrhu steka ako je x=5; y=3 ako je x=-3; y=1 ako je x=0 i y=0 u suprotnom.

Općenito govoreći, pokazivačka procedura može biti ne samo numerička konstanta, već i varijabla ili bilo koja druga procedura koja zadovoljava jednostavan zahtjev da ne izbacuje ništa iz steka i gura jednu vrijednost u stek.

Kao ilustraciju načina na koji se koriste operacije izvršenja uslovne procedure, izmenimo proceduru TIME u prethodnom odeljku tako da se brojač zaustavi kada se zada dati uslov:

: VRIJEME [t] 1- C IF+ VRIJEME ;

Sada se ova TIME rutina poziva samo kada je vrh steka pozitivan. Brojač će raditi tačno N puta ako, na početku prvog izvršavanja TIME, vrh sadrži pozitivan broj N. Na primjer, da biste dobili 7 brojanja, morate navesti

7 puta<ВК>

Pošto IF+ u definiciji TIME, kao i svaka uslovna operacija, uklanja testirani element iz steka, a ovaj element je neophodan za naredne operacije, mora se duplirati postavljanjem operacije C (Copy) ispred IF+.

Rekurzija nije primarno sredstvo za ponavljanje izvršavanja procedure. Za programiranje ciklusa na jeziku PARADISE postoje naredbe RP (Ponavljanje - ponavljanje) i DO (Do - uradi, izvodi).

Komanda RP W upućuje da se procedura W izvršava iznova i iznova neograničen broj puta. Da bi se ponavljanja zaustavila, tijelo W procedure mora sadržavati EX (Exit - Exit) operaciju koja se izvršava pod datim uslovom. EX operacija prelazi na izvršenje procedure koja slijedi programski tekst nakon ponovljenog postupka koji sadrži ovu EX operaciju. Dakle, brojač, implementiran gore kao rekurzivna procedura TIME, može se programirati kao ponavljanje procedure W, koja je definirana na sljedeći način:

: W [t] 1- C IF0 EX ;

Da bi brojač radio 25 puta, potrebno je izvršiti liniju

Zajedno sa EX operacijom, koja se koristi u instrukcijama uslovnog izvršenja, postoje i operacije uslovnog izlaza EX-, EX0, EX+ koje imaju isti efekat kao instrukcije IF-EX, IF0 EX, IF+ EX, tj. konzumiraju gornji element koji testira svoj znak i izlazi ako se znak poklapa sa onim navedenim u oznaci operacije. Operacije EX, EX-, EX0, EX+ mogu se koristiti ne nužno u tijelu procedure koja se najviše ponavlja (u našem slučaju W), već iu procedurama na koje se odnosi.

Kao primjer, razmotrite problem pronalaženja najvećeg zajedničkog djelitelja dva prirodna broja pomoću Euklidove metode. Suština metode je da je potrebno od većeg broja oduzeti manji broj sve dok brojevi ne postanu jednaki jedan drugom. Nakon postizanja jednakosti, naći će se i najveći zajednički djelitelj.

Programiranje će se vršiti metodom razvoja odozgo prema dolje. Prvo, definišemo GCD proceduru koja fiksira opštu šemu algoritma. Parametri ovog postupka su dva broja M i N na steku, za koje se nalazi najveći zajednički djelitelj. U tijelu GCD procedure mora se specificirati ciklički proces pretvaranja vrijednosti u steku. Kao rezultat ovog procesa, dva jednaka broja bi trebala ostati na stogu - bilo koji od njih se može uzeti kao najveći zajednički djelitelj. Imajući na umu ova razmatranja, GCD postupak se može definirati na sljedeći način.

: gcd RP STEP [nod(M,N),nod(M,N)] D [nod(M,N)] ;

Sada je potrebno programirati jedan korak iterativnog procesa, tj. definirati STEP proceduru. Njegovi parametri su dva broja na steku. Morate uporediti ove brojeve i izaći iz petlje ako su jednaki, u suprotnom oduzmite manji od većeg. To se može uraditi, na primjer, ovako:

: KORAK C2 C2 - BRS NOP EX E2 C2 - ;

Sada u programu nema nedefinisanih procedura i možete početi da ga testirate. Provjeru treba izvršiti odozdo prema gore, odnosno prvo morate biti sigurni da postupak STEP radi ispravno, a tek onda - GCD.

Operacija osnovnog jezika DO uzrokuje da se procedura nazvana po njoj ponovi N puta, gdje je N broj koji se nalazi na vrhu steka u vrijeme kada se DO izvršava. Na primjer, da bi se procedura P izvršila 8 puta, potrebno je navesti

8 D.O.P

Ako postoji barem jedna izlazna operacija u tijelu procedure P i uvjet za njeno izvršenje je ispunjen prije nego što nastupi određeni broj ponavljanja, tada će se ponavljanja prekinuti izlaskom iz procedure, kao što je to učinjeno u slučaju operacija RP. Na primjer, ako DO ponavlja gornju proceduru W, čija definicija sadrži IF0 EX, pisanje [T] 30 DO W će uzrokovati 30 ponavljanja W ako je vrijednost T>=30. Ako je 0

Ako do trenutka kada se operacija DO izvrši, vrh steka ima nultu ili negativnu vrijednost, tada se procedura koja slijedi nakon DO neće biti izvršena ni jednom.

Da bismo ilustrirali upotrebu DO operacije, definiramo proceduru NUM, koja broji broj ne-nula bitova u 32-bitnoj riječi x specificiranoj na vrhu steka.

Brojač broja jedinica će biti postavljen na vrh hrpe. Brojanje jedinica će se sastojati od ponavljanja NUMI procedure 32 puta, pri čemu ćemo ispitati jedan bit riječi x. Po izlasku iz petlje, željeni broj bi trebao biti na vrhu hrpe.

: NUM [x] 0 E2 32 DO NUMI D [N] ;

Za brojanje bitova koji nisu nula koristimo činjenicu da je jedinica u najvišem (31.) bitu riječi znak negativnog broja. Ako je riječ koja se proučava negativna, onda se jedna mora dodati N. Na kraju NUMI procedure, potrebno je pomaknuti riječ koja se proučava jedan bit ulijevo.

: NUMI C IF- N+ SHL ;

Implementacija N+ procedure je prilično jednostavna: trebate dodati jedan na vrh steka bez promjene vrha.

: N+ E2 1+ E2 ;

Ponovljive procedure mogu sadržavati RP i DO operacije u svojim tijelima, što dovodi do ugniježđenih petlji, a bilo koja dubina ugniježđenja je dozvoljena. U ovom slučaju, postoji operacija EXT za izlazak iz ugniježđene petlje, koja ukazuje na dubinu ugniježđenja na vrhu steka. Na primjer, izlaz iz dvije ugniježđene petlje može se specificirati na sljedeći način:

Treba imati na umu da upotreba naredbe EXT zahtijeva povećanu pažnju, jer se prilikom modifikacije programa dubina ugniježđenja petlji može promijeniti i odgovarajuća konstanta prije EXT-a će se morati promijeniti.

Imenovani podaci

Stog operanda je glavni, ali ne i jedini mehanizam za manipulaciju podacima u PRSP. Takođe je moguće, zajedno sa definicijama procedura, deklarisati elemente i standardno organizovane kolekcije elemenata podataka (tzv. strukture), koji su tada dostupni za upotrebu po svojim imenima. Implementacijom deklaracija podataka, procesor rezerviše memoriju potrebnu za njihovo skladištenje i obezbeđuje potrebne mehanizme za pristup ovoj memoriji.

Osnovni jezik PRSP uključuje niz direktivnih riječi o kojima se govori u nastavku za deklariranje varijabli i nizova. Kako bi se proširio jezik sistema, u njega se mogu uvesti i druge riječi ove vrste, a samim tim i drugi elementi i strukture podataka.

Riječ VAR deklarira 16-bitnu numeričku varijablu. Na primjer, unos

deklarira varijablu X, odnosno govori procesoru da je ime X ime varijable. Procesor pridružuje ovom imenu 16-bitnu memorijsku lokaciju koja će pohraniti vrijednost ove varijable. Instrukcija da se dodijeli vrijednost varijabli X, koja se nalazi na vrhu steka operanda, je

Izvršavanjem ove naredbe, procesor uklanja gornji element iz steka i upisuje njegovu vrijednost u ćeliju dodijeljenu varijablu X.

Naredba koja se sastoji samo od imena varijable, ispred koje nema slova !, uzrokuje da se vrijednost ove varijable gurne na stog, a učitavanje se vrši kopiranjem sadržaja odgovarajuće memorijske ćelije, tj. varijable ostaje nepromijenjena. Dakle, svako pojavljivanje imena varijable X u programu, ako mu neposredno ne prethodi riječ koja propisuje drugačiju radnju, gurnut će trenutnu vrijednost ove varijable na stog, baš kao što su direktno dati brojevi (numerički literali) su gurnuti.

Kao primjer, dajemo drugu verziju GCD procedure o kojoj smo gore govorili, u kojoj se koriste dvije radne varijable.

: NOD! X! Y RP KORAK X [GCD] ;

: KORAK X Y = EX+ X Y BR+ X-Y Y-X ;

: X-Y X Y - ! X;

: Y-X Y X - ! Y ;

Kao što vidite, program je postao nešto duži, ali je njegova jasnoća povećana.

Riječ VCTR deklarira jednodimenzionalni niz (vektor) od 16-bitnih ćelija, a broj najvišeg elementa ovog niza je dat vrijednošću vrha. Na primjer, kao rezultat pisanja

9 VCTR ROW, procesor rezerviše 10 sekvencijalno adresabilnih 16-bitnih reči memorije, formirajući ROW(0:9) vektor. Prvo, broj 9 se gura na stek, a zatim se izvršava VCTR procedura, koristeći gornji element steka za određivanje dužine ROW vektora koji će biti kreiran.

Guranje na stek vrijednosti j-tog elementa vektora ROW, 0<=j<=9, задается командой

[j]RED

Koristeći broj elementa na steku kao parametar, ime vektora ROW uzrokuje da se taj broj zamijeni vrijednošću odgovarajućeg elementa. Ako postoji riječ! neposredno ispred imena ROW vektora, tada se elementu ovog vektora označenom vrhom dodjeljuje vrijednost podvrhta, a dubina steka se smanjuje za 2. Na primjer, možete resetirati 5. element ROW vektora kako slijedi:

Postoji i mogućnost kombinovanja konstantnih vektora, tj. vektori 16-bitnih brojeva čije su vrijednosti definirane kada se deklariraju i ne mijenjaju se u budućnosti. Tako se vektor 16-bitnih konstanti VC dužine L+1 deklarira korištenjem riječi CNST u obliku:

CNST VC k0 k1 ... kL ;

gdje su k0, k1, ... kL komande koje guraju jednu vrijednost u stek. Najčešće su to samo numerički literali, ali mogu postojati i imena varijabli, procedura, kao i naredbi koje se sastoje od parova riječi, kao što je, na primjer, naredba za slanje adrese varijable "X" o kojoj se govori u nastavku Pristup elementima konstantnog vektora vrši se na isti način kao i komponentama regularnih vektora, na primjer:

Višedimenzionalni niz od 16-bitnih riječi deklarira se riječju ARR, kojoj prethode maksimalne vrijednosti indeksa za svaku dimenziju i broj dimenzija. Na primjer, trodimenzionalni niz TIR(0:8,0:2,0:24) je deklariran ovako:

Broj 3 neposredno prije ARR označava dimenziju deklariranog niza.

Guranje elementa niza na stek se postiže davanjem indeksa tog elementa, nakon čega slijedi ime niza. Na primjer, naredba za guranje elementa TIR(0,2,2) na stek je izražena kao

Shodno tome, dodeljivanje trenutne vrednosti vrha steka ovom elementu se daje naredbom

Svi razmatrani primjeri ilustrirali su stvaranje struktura od 16-bitnih riječi. Međutim, jezik takođe omogućava da se definišu strukture od 32-bitnih reči i 8-bitnih bajtova. Da biste to učinili, riječ koja definira strukturu ima prefiks LONG ili BYTE, respektivno. Na primjer,

5 BYTE VCTR X - definicija 6-komponentnog bajt vektora X;

BYTE CNST Y 65 66 67 ; - definicija 3-komponentne bajt vektor-konstante Y;

10 20 2 LONG ARR MTRX - definicija matrice dugih riječi MTRX(0:10,0:20).

Čitanje elemenata word i byte struktura se vrši na potpuno isti način kao u slučaju 16-bitnih struktura riječi. Ako je dužina elementa manja od 32 bita, ekstrahirana vrijednost se stavlja u nižu riječ ili bajt vrha steka, a visoki dio vrha se postavlja na nulu. Niska riječ ili bajt 32-bitne duge riječi na steku se također uzima kao vrijednost dodijeljena elementu strukture riječi ili bajta.

Iako se 16-bitni format riječi koristi za definiranje podataka prema zadanim postavkama, on također ima oznaku WORD. Preporučljivo je koristiti ovaj prefiks kada se program treba prenijeti na druge mašine, gdje je također implementiran DSSP i zadana vrijednost može biti drugačija.

Bajt strukture podataka najčešće se koriste za pohranjivanje i obradu tekstualnih informacija. To je zbog činjenice da je jedan bajt dodijeljen u memoriji računara za kodiranje jednog znaka. Za postavljanje kodova znakova u jeziku PARADISE postoji konstrukcija #l, gdje je l bilo koji znak dostupan na tastaturi računara. DSSP procesor ovu konstrukciju doživljava kao naredbu za guranje slova l na stek. Na primjer:

Ova konstrukcija izvodi iste radnje kao numerički literal jednak kodu navedenog znaka, ali je njegova upotreba poželjnija, jer, prvo, eliminira potrebu za pamćenjem kodova i, drugo, čini programe razumljivijim. Može se, posebno, dati sljedeća definicija konstantnog vektora Y:

BYTE CNST Y #A #B #C ;

Često je zgodno koristiti simboličku notaciju za numeričku konstantu u programu. Da bismo pružili ovu mogućnost, postoji definitivna riječ VALUE:

Ova naredba izbacuje gornji element iz steka i formira riječ s imenom odmah iza VALUE. Upotreba ove riječi je ekvivalentna upotrebi numeričke konstante. Na primjer:

Rad sa memorijom po fizičkim adresama

Razmatrani alati pružaju mogućnost imenovanja podataka i manipulacije podacima bez obzira na adresni sistem računara. Ali osnovni jezik takođe uključuje alate koji vam omogućavaju da manipulišete adresama memorijskih elemenata. Adresa varijable ili elementa niza X se gura na stek naredbom

U slučaju elementa niza, ovoj naredbi prethodi vrijednost indeksa(ova).

Instrukcija osnovnog jezika @ zamjenjuje adresu duge memorijske riječi na vrhu steka vrijednošću koju duga riječ sadrži. Na primjer, vrijednost varijable Y može se gurnuti na stek izvršavanjem sljedećeg reda:

@B instrukcija zamjenjuje adresu vrijednošću odgovarajućeg bajta, pretpostavljajući da su visoki bajtovi vrha steka nula, a @L instrukcija zamjenjuje adresu 32-bitnom riječju.

Tu su i upute za upisivanje vrijednosti u memoriju. Naredba !T upisuje 16-bitnu vrijednost podvrha na adresu iskačenu sa vrha steka. Naredba !TB uzrokuje slično upisivanje nižeg bajta podčvora u bajt koji je adresiran od strane čvora, a !TL upisuje 32-bitnu riječ podčvora u riječ kojoj čvor adresira. Na primjer, možete dodijeliti vrijednost 15 petom elementu bajt vektora BV(0:5) pomoću sljedećih naredbi:

15 5" B.V.!TB

Potreba za radom s memorijom na fizičkim adresama obično se javlja prilikom kreiranja programa koji ovise o arhitekturi određenog računala, na primjer, prilikom kreiranja ulaznih/izlaznih drajvera.

Dodatne operacije sa podacima i memorijom

Da bi se postigla veća efikasnost i kompaktnost programa, u PARA jezik su uvedene sledeće operacije:

0 <имя переменной>- resetirajte varijablu;

1 <имя переменной>- dodijeliti jedinicu varijabli;

1- <имя переменной>- smanjiti vrijednost varijable za jedan;

1+ <имя переменной>- povećati vrijednost varijable za jedan;

!- <имя переменной>- oduzeti vrijednost vrha steka od varijable;

!+ <имя переменной>- dodati vrijednost vrha steka varijablu.

Svaka od ovih operacija se lako programira korištenjem naredbi za čitanje i pisanje varijabli. Na primjer,

0 X je ekvivalentno 0 ! X

1+ X je ekvivalentno X 1+ ! X

X je ekvivalentno X E2 - ! X

Upotreba ovih operacija povećava efikasnost i vidljivost programa.

U praksi je često potrebno dodijeliti jednu vrijednost svim elementima niza. Za ovo postoji operacija na RAJskom jeziku!!!<имя массива>. Njegova akcija je da dodijeli vrijednost vrha steka svim komponentama specificiranog niza. Operacija!!! primjenjivo na nizove sa elementima bilo kojeg formata.

Primjer upotrebe:

kod karaktera "razmak" je upisan u sve komponente BUF niza bajtova.

Često je potrebno dobiti informacije o strukturi podataka iza imena u programu. Par naredbi SIZE? - dati format elementa podataka: 1, 2 ili 4 bajta i DIM? - vraćaju broj elemenata podataka u strukturi. Na primjer, ako su podaci deklarirani

3 4 2 DUGI ARR Z

onda će u odnosu na njih ove naredbe dati sljedeći rezultat (decimalni brojevi):

VELIČINA? X SIZE? Y SIZE? Z

DIM? X DIM? Y DIM? Z

Skup instrukcija DSSP-procesora uključuje, kao dodatak, četiri instrukcije koje vam omogućavaju čitanje i pisanje pojedinačnih bitova memorijskih ćelija računara. Ovo su naredbe @BI, !BI, !BI0, !BI1. Parametri za svaki od njih su adresa memorijske riječi na steku i broj bitova u ovoj riječi (podsjetimo da su bitovi numerirani s desna na lijevo, počevši od nule). Naredba !BI također pretpostavlja prisustvo na steku i vrijednost bita koji se zapisuje. Naredba @BI zamjenjuje navedene parametre vrijednošću odabranog bita (0 ili 1), komande !BI0 i!BI1 dodjeljuju vrijednost 0 i 1 odabranom bitu, respektivno, uklanjajući njihove parametre iz steka, a !BI komanda postavlja odabrani bit na najmanji bitni bit trećeg elementa steka i uklanja sva tri njegova parametra iz steka. Na primjer, ako je vrijednost varijable X binarni broj 101101, tada će rezultati navedenih operacija biti sljedeći:

" X [addr. X] 3 @BI - treći bit X, 0 " X 3 !BI - X je 100101,

" X [addr.X] 0 !BI0 - X je 100100,

" X [addr.X] 1 !BI1 - X je 100110.

Jezik PARADISE takođe ima mogućnosti za rad sa nizovima bajtova koji se nalaze u memoriji. Da bi se specificirao niz bajtova, dva parametra se guraju u stog: početna adresa stringa (tj. adresa njegovog prvog bajta) i dužina niza (broj bajtova u njemu).

Naredba !!!MB se koristi za dodjelu svih bajtova stringa jednoj (datoj na steku) vrijednosti. On troši tri parametra iz steka: , gdje je b vrijednost koja će se dodijeliti, a i l su početna adresa i dužina niza bajtova, respektivno. Neka, na primjer, trebate nulirati elemente od 3. do 10. bajtnog niza TXT (0:20). Da biste to učinili, možete pokrenuti sljedeću liniju:

0 3" TXT 8 !!!MB

kao rezultat toga, osam uzastopnih elemenata navedenog niza, počevši od 3., će dobiti vrijednost 0. Slična naredba!!!MW je dizajnirana da popuni niz od 16-bitnih riječi istom vrijednošću (broj riječi je naznačeno na vrhu hrpe), a naredba! !!M - za popunjavanje niza dugih riječi.

Komanda !SB šalje nizove bajtova. Njegovi parametri su: , gdje su a1 i l početna adresa i dužina proslijeđenog niza, a2 je početna adresa niza na koji se vrši prosljeđivanje. Kao rezultat izvršavanja naredbe!SB, niz bajtova dužine l će biti lociran u memoriji sa adrese a2, što je tačna kopija niza koji se nalazi na adresi a1 prije izvršenja prijenosa. Izvorni niz i odredišni niz mogu se preklapati. Neka, na primjer, želite da premjestite elemente niza bajtova M(0:10) na sljedeći način: M(10):=M(9), M(9):=M(8), ..., M(1):= M(0). Da biste to učinili, možete koristiti naredbu!SB:

0" M 10 C2 1+ !SB

kao rezultat, niz od 10 bajtova će biti pomjeren za jedan bajt u smjeru povećanja memorijskih adresa.

Komanda!SB je zgodna za rad sa nizovima znakova (sjetite se da je svaki znak kodiran jednim bajtom). Omogućava, na primjer, da se nizu bajtova dodijeli vrijednost eksplicitno datog literalnog niza. Za specificiranje takvog stringa koristi se tekstualni literal, tj. citirani niz znakova, kao što je "TEXT LITERAL". Ova konstrukcija, kada se naiđe u programu, uzrokuje da se početna adresa i dužina niza bajtova koji sadrži citirani tekst gurne u stog. Ove opcije se zatim mogu koristiti s naredbom !SB. Na primjer, fragment "TABLE" 0 " TN !SB će uzrokovati da se literal "TABLE" prenese u TN niz.

Komanda SRCHB traži dati bajt u nizu. Parametri: , gdje je b bajt čije prvo pojavljivanje treba pronaći, a i n postavljaju adresu početka i dužinu niza koji će se tražiti, respektivno. Ako je n>0, onda se pretraga vrši od adrese a do adrese a + n-1 (u smjeru povećanja adresa), ako je n<0, то поиск ведется с адреса a до адреса a+n+1 (в сторону убывания адресов). В результате выполнения этой команды в стеке оказывается значение d, равное смещению относительно адреса a до первого вхождения байта b. Если такое вхождение не обнаружено, то d=n. Примеры:

#T "TEXT" SRCHB

#A "TEXT" SRCHB

#E "TEXT" [#E,a,4] 1- + -4 [#E,a+3,-4] SRCHB [-2]

Završavajući pregled načina rada sa podacima, zadržimo se na pitanju pohranjivanja podataka u eksternu memoriju računara, tj. na magnetnim diskovima. Jezik PARADISE ima naredbu SAVE<имя файла>Naređuje pohranjivanje kopije glavne memorije sistema na disk, zajedno sa korisnički definiranim objektima. U ovom slučaju, memorijska područja dodijeljena za podatke VAR, VCTR, ARR operacijama se ne prikazuju na disku. Kao rezultat toga, kada se sačuvani sistem učita s diska, vrijednosti navedenih podataka nisu definirane (moraju se odrediti tokom izvršavanja programa). U većini slučajeva to je opravdano, jer nema potrebe trošiti prostor na disku za pohranjivanje radnih varijabli, bafera itd. Međutim, postoje podaci čije se vrijednosti moraju odrediti odmah nakon pokretanja sistema s diska. Primjer je varijabla koja pohranjuje brzinu razmjene podataka s nekim vanjskim uređajem. Prilikom prelaska na drugi kurs, dovoljno je promijeniti vrijednost ove varijable bez ikakvih korekcija programa.

Indikacija procesoru da vrijednosti elemenata neke strukture podataka treba biti zapisane na disk naredbom SAVE je FIX prefiks stavljen prije definicije strukture, na primjer

FIX VAR SPEED 20 FIX BYTE VCTR TABL

Rad sa strukturama podataka definisanim na ovaj način ne razlikuje se od rada sa strukturama definisanim na uobičajen način.

Komande kontrole procesora

U jeziku PARADISE postoji mala grupa naredbi dizajniranih za upravljanje PRSP procesorom, odnosno emulatorom PRSP procesora.

Naredba RESTART uzrokuje ponovno pokretanje procesora. U tom slučaju, stek se briše i prikazuje se poruka

DSSP verzija XX.XX.XX

Besplatno XXXXXW

i procesor prelazi u režim čekanja za unos komande. Ova naredba je korisna pri otklanjanju grešaka u programima. Također se izvršava u slučaju grešaka: indeks izvan granica niza, iscrpljivanje slobodne memorije itd.

Naredba \G se koristi za nastavak izvršavanja programa nakon zaustavljanja na nedefiniranoj riječi. Ako tokom izvršavanja procedure procesor naiđe na referencu na nedefinisanu reč, izdaje poruku:

prestani ne znam<слово> .

gdje je tačka PRSP odzivnik procesora, signalizirajući da je procesor u stanju zaustavljanja na nedefiniranoj riječi. U ovom režimu možete izvršiti bilo koju komandu procesora, baš kao u normalnom režimu, kada je zvjezdica prompt. Postoje dva načina za izlazak iz ovog moda - ili izvršavanjem naredbe \G (tada će procesor nastaviti izvršavanje prekinute procedure, preskačući nedefiniranu riječ), ili naredbom RESTART.

Komanda EXEC daje instrukcije procesoru da izvrši proceduru čija se adresa nalazi na vrhu steka. Da biste dobili adresu procedure, koristite naredbu "" (dva apostrofa) iza koje slijedi naziv procedure. Na primjer, kao rezultat izvršavanja naredbe

adresa ABS procedure će biti gurnuta na stek. Ove komande vam omogućavaju da prosledite proceduru kao parametar drugoj proceduri.

Već spomenuta operacija SAVE spada u grupu komandi upravljanja procesorom.<имя файла>, instrukcije da se kopija sistema sačuva na disku, kao i komande koje određuju izvor unosa tekstualnih informacija koje se dostavljaju procesoru. U početku, ovaj izvor je ekranska tastatura.

LOAD komanda<имя файла>prebacuje ulaz na disk datoteku sa navedenim imenom. Naredba PF - nalaže unos komandi iz bafera uređivača teksta. Naredba TEXEC šalje tekstualni niz na ulaz procesora, čiji su parametri specificirani na steku. Kada se izvrše naredbe sadržane u navedenim izvorima, ulaz se automatski prebacuje na ekransku tastaturu.

Komande za upravljanje rječnikom

Ulazni tok instrukcija koji percipira procesor može, posebno, sadržavati instrukcije za definiranje procedura i podataka, što uzrokuje kompilaciju u internu reprezentaciju i pohranjivanje tijela procedure ili dodjelu memorije za navedene podatke, kao i unos naziva kompajlirane procedure ili strukturu podataka u rječnik PRSP.

Rječnik uspostavlja korespondenciju između eksternih (koje se koriste u tekstu programa) imena i adresa objekata koji odgovaraju tim imenima u internom prikazu. Prilikom obrade definicije procedure ili opisa datog imena, procesor izgrađuje rečnik, formirajući u njemu novi unos rečnika koji sadrži ime (tačnije, prvih 7 znakova imena) i adresu tela procedure ili deskriptor podataka povezan s ovim imenom.

U programiranju odozgo prema dolje, tijela procedura mogu sadržavati reference na objekte koji još nisu definirani. U tom slučaju se u rječniku formiraju rječnički napisi (zaglavlja) označeni znakom neodređenosti. Koristite naredbu UNDEF za prikaz svih nedefiniranih imena.

U toku razvoja rečnika moguće je formirati podrečnike - imenovane zbirke rečničkih natuknica. Podrečnik obično kombinuje procedure i strukture podataka koje se odnose na isti zadatak. Da bi se izbjegla zabuna između imena podriječnika i drugih programskih objekata, ime podriječnika mora početi slovom $. Pristup podrječnicima za njihov rast ili korištenje može se otvoriti i zatvoriti posebnim naredbama, koje uključuju sljedeće (ime $v označava bilo koji važeći podriječnik).

GROW $v - povećajte $v podrečnik, odnosno, dok nije drugačije navedeno, stavite imena svih kompajliranih procedura i podataka u $v podrečnik;

USE $v - otvoren za upotrebu (za traženje imena u njemu) $v podrečnik;

SHUT $v - zatvoriti mogućnost korišćenja $v podrečnika;

SAMO $v - učiniti dostupnim za upotrebu samo $v podrečnik;

OTKAZI - otkazivanje SAMO zadnje.

Postoji i naredba ?$ koja na displeju ispisuje nazive svih podrečnika njihovog stanja - da li je podrečnik za pretragu otvoren ili zatvoren. Podrečnik čije je ime ispisano na vrhu se uvek povećava.

Osnovne PRSP procedure čine podrečnik pod nazivom $PRIME, otvoren za upotrebu i rast prema zadanim postavkama, to jest, ako nije bilo naredbe za naređenje drugog podrečnika da raste.

Neka, na primjer, operacija?$ ispiše sljedeće stanje podrečnika.

$PRG otvoren

$PRIME je otvoren

$EDIT zatvoreno

$PRIME je otvoren

SISTEM zatvoren

To znači da je $PRG trenutno otvoren za povećanje i korištenje, $PRIME je samo za upotrebu, a $EDIT i SYSTEM nisu dostupni. Imajte na umu da se podrečnik može sastojati od nekoliko sekcija sa istim imenom.

Postoje naredbe za brisanje iz rječnika jednog ili drugog skupa unosa u rječniku i, možda, internih objekata povezanih s njima. Dakle, naredba FORGET $v uklanja sva imena unesena u rječnik (ne samo $v podrečnik) od posljednjeg izvršavanja naredbe GROW $v, zajedno sa objektima označenim tim imenima, i poništava rast $v podrečnik koji je postavio. Naredba PROGRAM $v izvodi iste radnje kao i sekvencijalne FORGET $v GROW $v naredbe. Prisutnost takve naredbe na početku bilo kojeg programa dovodi do činjenice da će se prilikom ponovnog kompajliranja programa njegova stara kopija izbrisati i formirat će se podrečnik za pohranjivanje objekata nove kopije programa. Na primjer, izvođenjem operacije FORGET $PRIME na rječniku čije je stanje prikazano gore, dobijamo novo stanje:

$EDIT zatvoreno

$PRIME je otvoren

SISTEM zatvoren

Tokom izvršavanja naredbe FORGET, prikazuju se nazivi sekcija koje treba izbrisati.

Imajte na umu da ime SYSTEM podrečnika ne počinje sa $. Ovo je dozvoljeno, ali dovodi do činjenice da primjena naredbi FORGET i RPOGRAM na ovaj podrečnik ne uzrokuje nikakve radnje (izgleda da za njih SYSTEM podrečnik ne postoji).

S obzirom na činjenicu da velika većina procedura u gotovom programu ne zahtijeva pristup po vanjskom imenu, moguće je ukloniti njihova imena iz rječnika uz očuvanje internih objekata koji su im povezani. Komanda CLEAR $v uklanja sva imena iz svih sekcija $v podrečnika, osim onih kojima prethodi u tekstu programa (kada su definisani) prefiks:: (dve dvotačke). Na primjer, kao rezultat izvršavanja sljedećeg programskog fragmenta od strane procesora:

:: : X+ Y !+ X ;

CLEAR $EXAM samo će imena X i X+ ostati u $EXAM podrečniku, unos u rječnik Y će biti uklonjen (iako će varijabla koja odgovara riječi Y u internom prikazu ostati).

I/O komande

Glavno sredstvo interakcije korisnika sa DSSP-om je terminal, koji je obično katodni displej sa tastaturom. Sa terminala se vrši početni unos, uređivanje i debagovanje programa, priprema podataka i cjelokupno upravljanje sistemom. Programi i podaci, kao i sam PRSP, pohranjuju se kao datoteke na diskove i mogu se odštampati na štampaču. Za kontrolu ulaza/izlaza, skup osnovnih procedura PRSP uključuje dolje opisane alate.

Programiranje rada terminala omogućeno je komandama za unos i izlaz brojeva, pojedinačnih slova i nizova slova (stringova), kao i nekim dodatnim naredbama.

Naredba TIB (Terminal Input Byte) pokreće petlju čekanja za pritisak na tipku na tipkovnici terminala. Kada se pritisne tipka, 8-bitni kod odgovarajućeg znaka se gura u stog kao niži bajt na vrhu, dok gornja 3 bajta sadrže nule. Na displeju se prikazuje kopija ovako unešenog znaka. Postoji i TRB (Terminal Read Byte) komanda, koja se razlikuje od TIB-a po tome što slanje koda unesenog znaka u stog nije praćeno prikazivanjem ovog znaka na displeju.

Komanda TIN (Terminal Input Number) pokreće ciklus unosa u stog i prikazuje na displeju broj koji je ukucan sa tastature. Ulazni broj mora biti niz cifara koji može početi sa znakom minus i završavati sa . Ovisno o postavljenom režimu unosa/izlaza, cifre se percipiraju od strane procesora kao heksadecimalne, decimalne, oktalne ili binarne. Ako heksadecimalni broj počinje cifrom, označenom slovom, tada se ispred njega dodaje cifra 0. sa isjecanjem bitova koji se nalaze lijevo od najznačajnijeg bita koji ima težinu od 2 na stepen 31.

Svaka TIN komanda unosi jedan broj. Ako treba da unesete niz brojeva u jedan red, morate ih razdvojiti pritiskom na taster , a za unos svakog broja u programu mora se ponovo izvršiti TIN naredba.

Niz koji sadrži n karaktera ukucanih sa tastature se unosi u memoriju računara u obliku n bajtova koji se nalaze na sekvencijalno rastućim adresama, počevši od adrese a, pomoću naredbe TIS (Terminal Input String), ispred koje se upisuju adresa a i broj znakova n se guraju na stog. Neka, na primjer, bude deklariran bajt vektor X dovoljne dužine. Morate unijeti 9 znakova, dodijelivši njihove vrijednosti elementima ovog vektora, počevši od nultog elementa:

Slično, koristeći TOS naredbu, specificira se izlaz niza od n bajt-litara sa početnom adresom a:

Izlaz na terminal tekstualnih elemenata direktno uključenih u program je obezbeđen konstrukcijom

."<текст>"

Na primjer, da bi se tekst ENTER VARIANT NUMBER pojavio na ekranu prilikom izvršavanja određenog fragmenta programa, fragment mora sadržavati unos "UNESI BROJ VARIANTE".

Komanda TON (Izlazni broj terminala) prikazuje broj koji treba iskočiti sa vrha steka, a dužina izlaznog polja mora biti specificirana na vrhu. Izlazni broj je poravnat na desnu ivicu polja, prazne pozicije na lijevoj strani su popunjene razmacima, a ako dužina broja premašuje navedenu dužinu polja, onda dolazi do odsjecanja na lijevoj strani. U decimalnom I/O načinu, negativni brojevi počinju sa znakom minus.

Komanda TOB (terminal output byte) ispisuje karakter čiji je kod zadan niži bajt na vrhu steka. Dubina naslaga se smanjuje za 1.

Postoje i komande koje direktno kontrolišu pokazivač kursora:

CR - skok na početak novog reda,

SP - razmak, odnosno pomicanje za jednu poziciju udesno.

Komanda BELL izaziva kratak bip ("zvono").

Ponekad, kada komunicirate s terminalom, može biti potrebno provjeriti da li je tipka već pritisnuta i da li je zaslon već završio prethodnu izlaznu naredbu. Ovo se može učiniti pomoću naredbi TTI (Terminal Test Input) i TTO (Terminal Test Output), koje ostavljaju zastavicu 1 na steku ako se dogodio navedeni događaj, i 0 u suprotnom.

Izlazne komande pisača su slične naredbama izlaza terminala i bazirane su na sličnoj mnemonici u kojoj su slova LP (Line Printer) ili zamijenjena TO ili dodana kao vodeći. Na primjer, LPCR - prijelaz na početak novog reda, LPSP - razmak, LPN - izlaz broja iz podvrhma u polju određenom vrhom, LPB - izlaz znaka, LPS - izlaz niza znakova . Tu je i naredba [N] LPT, koja pomiče glavu za štampanje na N poziciju odštampane linije, i LPFF komanda, koja uvlači list papira. Za ispis eksplicitnog teksta, zgodno je koristiti tekstualni literal i naredbu LPS, na primjer:

"TABELA VRIJEDNOSTI FUNKCIJE" LPS

Upravljanje prekidima i izuzecima

Prilikom programiranja perifernih uređaja, postaje neophodno rukovati prekidima. U DSSP-u, ova obrada je programirana na sljedeći način. Program dizajniran za rukovanje prekidom je redovna PRSP procedura, ispred čije se definicije nalazi prefiks INT, na primjer INT: A !1+ I ; INT prefiks osigurava da se stanje procesora pohranjuje kada se prekine i vraća kada se prekid završi.

Komanda LINK se koristi za povezivanje rutine sa određenim prekidom:

<адрес вектора>VEZA<имя процедуры>tokom čijeg se izvršavanja, prema odgovarajućem vektoru, snima poziv na proceduru rukovanja prekidom. Instrukcija LINK može izvršiti i statičko povezivanje procedure s prekidom, koji se javlja u vrijeme kompajliranja programa, i dinamički, kada se program izvršava.

Prekid procesora je način na koji se sistem prijavljuje o događaju koji se dogodio u vanjskom svijetu. U programu se također mogu pojaviti događaji koji zahtijevaju trenutnu obradu. Zovu se izuzetne situacije. Primjeri takvih situacija: podjela nulom, greška u komunikaciji s uređajem, kraj ulazne datoteke itd.

U DSSP-u, izuzetne situacije se popravljaju korištenjem komandnih prekida. Prekid naredbe je imenovana operacija poziva procedure odgovora i deklarira se na sljedeći način:

TRAP<имя вызова> <конечная реакция>

Na primjer:

ZAMKA S1 .Situacija S1.

U prvom slučaju, konačna reakcija na prekid S je procedura X, u drugom slučaju, kada dođe do prekida S1, na terminalu će se prikazati sljedeća poruka: Situacija S1.

Program za koji je vjerovatno da će uzrokovati prekid može postaviti svoj odgovor na njega pomoću instrukcije za hvatanje. Postoje dvije vrste presretanja u PRSP: ON i EON. Naredbe za presretanje mogu se koristiti samo unutar procedura i imaju format:

ON<имя прерывания> <реакция>

eon<имя прерывания> <реакция>Na primjer:

: A ... ON S "Prekid S" ... ;

: A1 ... EON S1 ABC ... ;

ON i EON uspostavljaju različite vrste reakcija. Ako je nova reakcija određena naredbom ON, onda kada dođe do prekida, izvršava se procedura reakcije, nakon čega prekinuti program nastavlja da se izvodi. Ako je reakcija postavljena naredbom EON, tada prvo stog operanda zauzima dubinu koju je imao u trenutku izvršavanja EON-a, zatim se reakcija izvodi, a kada se završi, izvršavanje procedure u kojoj je EON upotrijebljena komanda se odmah zaustavlja.

Razmotrite primjere. Procedura M unosi znakove sa terminalske tipkovnice i provjerava da li je to cifra. Ako uneseni znak nije cifra, pokreće se ND prekid. TRAP ND "Nije broj." : M RP M1 ; : M1 TRB [B] C #0< C2 #9 >&0 IF+ ND [B] TOB ;

Konačni odgovor na ND prekid je poruka: Nije brojka.

Ako je M pozvan iz P1 procedure koja ima svoj odgovor na ND prekid: P1 ON ND PR1 M ; : PR1 [B] CR "Greška." D#0 [#0] ; onda kada se unese necifren znak, ND prekid će biti obrađen od strane reakcionog programa PR1 tipa ON, što će uzrokovati izdavanje poruke iz novog reda: Greška. Uneseni znak će biti zamijenjen znakom 0, nakon čega će M nastaviti s radom.

Ako je M pozvan iz procedure P2: P2 EON ND PR2 M ; : PR2 CR "Greška. Kraj unosa." ; onda kada se unese necifren znak, ND prekid će biti obrađen od strane PR2 reakcionog programa tipa EON, što će uzrokovati da se poruka izdaje iz novog reda: Greška. Kraj unosa, nakon čega će P2 izaći. Stog operanda će tada biti prazan.

Ako je potrebno, prekid se može ponovo aktivirati u reakcionom programu, čime se proširuje na programe višeg nivoa. U ovom slučaju, ili program specificiran u komandi presretanja u proceduri koja obuhvata ili konačna reakcija će upravljati prekidom. Na primjer, ako modificirate PR2 na sljedeći način: : PR2 CR . "Greška. Kraj unosa." N.D.; tada će poruka prikazana na terminalu biti: Greška. Kraj unosa. Nije broj.

DSSP ima nekoliko ugrađenih komandnih prekida, na koje se odgovor može dati u korisničkim programima.

Assalamu alejkum ve rohmatullahi ve barakatuhu!
"Arapski je jezik stanovnika Raja!" (Približno značenje)
Draga braćo, molim vas da pojasnite pitanje u vezi ovog hadisa, da li je pouzdan? Općenito, da li su ove riječi riječi poslanika Muhammeda, alejhi selatu?
barakAllahu fikum wa jazakumullahu khairan!

Va alejkum selam ve rahmetullahi ve barakatuh!

At-Tabarani u "al-Awsatu" prema Abu Hurejri prenosi:
“Allahov Poslanik, sallallahu alejhi ve sellem, je rekao: "Ja sam Arap, Kur'an je na arapskom, a jezik džennetskih mjesta će biti arapski."

Šejh al-Albani ga je doveo u Silsila ad-daifa na broj 161, rekavši:

“Ovaj hadis je izmišljen (Maudu’). Zapravo, nema ni jednog pouzdanog hadisa koji objašnjava kojim će jezikom govoriti stanovnici Dženneta, stoga je potrebno šutjeti i ne ulaziti u razgovore o ovom pitanju, dajući znanje o tome Uzvišenom Allahu, i baviti se samo onim što će dovesti do činjenja onih djela koja će biti od koristi na onom svijetu!
Šejhul-islam Ibn Tejmijja, Allah mu se smilovao, upitan je: „Kojim jezikom će ljudi govoriti na Sudnjem danu? Hoće li se Uzvišeni Allah obraćati ljudima na arapskom? I da li je tvrdnja da je jezik stanovnika pakla perzijski, a stanovnici raja arapski?
Na šta je on odgovorio: “Hvaljen neka je Allah, Gospodar svjetova! Ne zna se kojim će jezikom ljudi govoriti toga dana, kako će im se i na kom jeziku obraćati njihov Gospodar, On je veliki i slavan. Ni Uzvišeni Allah, ni njegov Poslanik, sallallahu alejhi ve sellem, nisu nam ništa rekli o tome, niti je pouzdano da će jezik stanovnika Džehennema biti perzijski, a jezik stanovnika Dženneta arapski. A mi ne znamo da je po ovom pitanju među ashabima, radijallahu anhu, bilo nesuglasica. Naprotiv, suzdržali su se od toga, jer je pričati o tome beskorisno. Međutim, bilo je neslaganja među narednim generacijama po ovom pitanju. Neki su rekli da će komunicirati na arapskom, drugi su rekli da se to ne odnosi na stanovnike pakla, jer će odgovarati na perzijskom i to je njihov jezik u paklu. Treće, da će ljudi komunicirati na asirskom, jer je to Adamov jezik, iz kojeg su potekli svi drugi jezici. Četvrto - da se ovo ne odnosi na stanovnike Raja, jer će komunicirati na arapskom. Međutim, niko od njih nema argument u prilog njihovim riječima, ni sa strane razuma, ni iz šerijatskih izvora, već su to samo izjave bez ikakvih dokaza. Svemogući Allah najbolje zna!” Vidi Majmu'ul Fatawa 4/299.

U školama, za proučavanje osnova algoritamizacije, tzv. školski algoritamski jezik (obrazovni algoritamski jezik), koristeći riječi razumljive učeniku na ruskom jeziku. Za razliku od većine programskih jezika, algoritamski jezik nije vezan za arhitekturu računara, ne sadrži detalje vezane za uređaj mašine.

Primjeri

Algoritam u algoritamskom jeziku općenito je napisan u obliku:

alg naziv algoritma (argumenti i rezultati) dato uslovi primenljivosti algoritma neophodno cilj algoritma rano opis međuvrijednosti | sekvenca komandi (tijelo algoritma) con

Prilikom pisanja algoritma, ključne riječi su obično bile podvučene ili podebljane. Uvlačenja su korištena za isticanje logičkih blokova, a par riječi početka i kraja bloka povezivao se okomitom trakom.

Primjer izračunavanja zbira kvadrata:

alg Zbroj kvadrata ( arg cijeli n, cut cijeli S) dato| n > 0 neophodno| S = 1*1 + 2*2 + 3*3 + … + n*n rano cijeli i | unos n; S:=0 | nc za i od 1 do n | | S:= S + i * i | kts | zaključak"S=", S con

E-radionica

Da bi ojačali teoretsko proučavanje programiranja na algoritamskom jeziku, 1985. godine stručnjaci sa Mehmata Moskovskog državnog univerziteta stvorili su urednik-kompajler "E-radionica"("E" - u čast Eršova), koji vam omogućava da unosite, uređujete i izvršavate programe na algoritamskom jeziku.

Godine 1986., za "E-vježbanje" je pušten skup trening svjetova (izvođača): "Robot", "Drafter", "Dvonožno", "Vozilo za sve terene", koji vam omogućavaju da jednostavno uvedete koncepte algoritma. „E-radionica“ je implementirana na računarima: Yamaha, Corvette, UKNC i bila je u širokoj upotrebi.

Ovaj programski jezik je stalno unapređivan i opis kasnije verzije "E-radionice" pojavio se u udžbeniku iz 1990. godine. Programski sistem "KuMir" ("Skup obrazovnih svjetova"), koji podržava ovaj udžbenik, izdalo je preduzeće InfoMir 1990. godine. Jezik ovog sistema naziva se i "KuMir".

Godine 1995. "KuMir" je preporučilo Ministarstvo obrazovanja Ruske Federacije kao glavni obrazovni materijal za kurs "Osnove informatike i računarskog inženjerstva" na osnovu udžbenika A. G. Kushnirenka, G. V. Lebedeva i R. A. Svorenje. .

Kritika

Međutim, treba napomenuti da algoritamski jezik, u nedostatku detalja koji ga direktno povezuju sa računarskom arhitekturom, ipak, pozivajući se na jezike slične algolou, implicitno uči školarce da se oslanjaju na von Neumannovu arhitekturu mašina. (Von Neumannova arhitektura je praktična implementacija ranije ideje nazvane Turing Machine. Postoje i druge ideje osim Turingove ideje. Najpopularnija od njih se zove Lambda račun: Alonzo Church je radio na njemu. Lisp Machine je arhitektura koja se zasniva na Lambda - računica.)

Linkovi

  • A. P. Ershov. Algoritamski jezik u školskom predmetu Osnove informatike i računarske tehnike. 05.07.1985
  • Forum o ruskim programskim jezicima i razvojnim alatima

Wikimedia fondacija. 2010 .

Pogledajte šta je "ruski algoritamski jezik" u drugim rječnicima:

    Algoritamski jezik je formalni jezik koji se koristi za pisanje, implementaciju ili proučavanje algoritama. Svaki programski jezik je algoritamski jezik, ali nije svaki algoritamski jezik pogodan za upotrebu kao jezik ... ... Wikipedia

    Ovaj izraz ima druga značenja, pogledajte Zmaj (značenja). Primjer blok dijagrama algoritma na jeziku DRAKON zmaj DRAKON sheme (prijateljski ruski algoritamski jezik koji pruža vidljivost) vizualni ... ... Wikipedia

    Ovaj izraz ima druga značenja, pogledajte Algoritamski jezik. Algoritamski jezik za učenje je formalni jezik koji se koristi za pisanje, implementaciju i učenje algoritama. Za razliku od većine programskih jezika, nije vezan za... Wikipediju

    Algoritamski jezik (također ruski algoritamski jezik, RAYA) je programski jezik koji se koristi za pisanje i proučavanje algoritama. Prilikom izučavanja informatike u školama, za proučavanje osnova algoritamizacije, tzv. školski algoritam ... ... Wikipedia

    Obrazovni programski jezik je programski jezik dizajniran da podučava specijaliste programiranju. Takav jezik mora ispuniti glavni zahtjev: jednostavnost. Što je jednostavnije, početnik će ga brže savladati. Mogućnosti takve ... ... Wikipedije

    Primjer blok dijagrama algoritma u zmajevim dijagramima jezika DRAKON DRAKON (Prijateljski ruski algoritamski jezik koji pruža vidljivost) je vizualni algoritamski jezik kreiran u okviru svemirskog programa Buran. Razvoj ovog jezika... Wikipedia