Formalizirani jezik. Formalni jezici i gramatike Primjer prirodnog programskog jezika

O željezničkom jeziku "Vlak će nastaviti kroz peron Krasnye Zori bez zaustavljanja." Imajte na umu da je vozač upotrijebio imenicu "stop", a ne glagol "stop". Zaustavljanje je vrlo važan koncept za željezničke radnike. Vlak može "stati", ali ne i "stati". Turchin [Turchin 2000], navodeći sličan primjer, ukazuje na formalizaciju jezika koji se koristi u uskostručne svrhe.

Formalizirani jezik može se definirati na sljedeći način [Turchin 2000]. Razmotrimo dvoetažni jezični model stvarnosti (sl. 4. 4). Situacija si kodirana je jezičnim objektom Li. Objekt L1 je naziv za si. Nešto kasnije situacija S1 zamijenjena je situacijom S2. Obavljajući neku jezičnu aktivnost, pretvaramo L1 u drugi objekt - L2. Ako je naš model točan, onda je L2 ime S2. Kao rezultat toga, bez poznavanja stvarne situacije S2, možemo dobiti ideju o tome dekodiranjem objekta jezika L2. Izvođenje L1->L2 pretvorbe određuje hoće li jezik biti formaliziran.

    Za formalizirani jezik, transformacija L1->L2 određena je isključivo jezičnim objektima Li koji u njoj sudjeluju i ne ovise o jezičnim reprezentacijama si koje im odgovaraju u semantici jezika.

    Za neformalizirani jezik, rezultat transformacije jezičnog objekta Li ne ovisi samo o vrsti reprezentacije same Li, već i o reprezentaciji si koju stvara u glavi osobe, o asocijacijama u koje je uključen.

Osoba je u stanju percipirati najneformaliziranije jezike. Ali računalo ne razumije, ili bolje rečeno, ne može izvršiti program na neformalnom jeziku. Zato formalni algoritamski programski jezici uvijek zauzimaju važno mjesto u proučavanju programiranja.

O formalizaciji neformaliziranog Formalizacija neformaliziranog je proces koji se ne može formalizirati. Iako se logičari i vojska pokušavaju boriti protiv toga.

O formuli ljubavi Formula ljubavi ne može se formalizirati. U najboljem slučaju, može se predstaviti samo kao vrlo grub model

Modeliranje jezika

Jezik modeliranja skup je pravila koja određuju konstrukciju modela (pojednostavljenih prikaza stvarnosti), uključujući njihovu vizualizaciju i definiranje strukture i ponašanja. Jezik modeliranja uključuje:

    elementi modela - temeljni koncepti modeliranja i njihova semantika;

    notacija - vizualni prikaz elemenata modeliranja;

    usage guide - pravila za korištenje elemenata u okviru izgradnje domenskih modela.

Programski jezici i integrirana okruženja

    Prema tvorcu prvog integriranog okruženja FRAMEWORK, integrirano okruženje je takav aplikacijski program da korisnik, nakon što ga pokrene na početku radnog dana, u njemu nalazi sve resurse potrebne za rad i stoga ne napušta integrirani program. okruženju do samog kraja radnog dana. Naravno, ova definicija nije baš točna i donekle idealizira situaciju, ali njezino opće značenje sasvim je jasno. Glavna značajka integriranih okruženja -visoki stupanj interaktivnost. To se postiže integracijom različitih softverskih resursa u jedinstvenu cjelinu, otuda i naziv. Dakle, integrirano okruženje prevoditelja programskog jezika (programa koji stvara izvršni program iz teksta određenog programskog jezika) obično sadrži uređivač teksta a sam kompilator sa sustavom za dijagnosticiranje grešaka kompilacije. Osim toga, obično ima i debugger - tumač zadanog jezika, koji izvršava program red po red i ima niz drugih posebnih mogućnosti. Jedno od područja koje se aktivno razvija, vizualni dizajn, u potpunosti se temelji na korištenju mogućnosti integriranog okruženja. Korisnik interaktivno odabire objekte programskog jezika potrebne za njegov program i uspostavlja veze između njih. Popularnost jezika kao što su Visual BASIC (Microsoft), kao i Object PASCAL (Delphi i Kylix, Borland okruženja) nije slučajna. Čak i neiskusni programer koji ne poznaje druge programske jezike osim BASIC-a i nikada nije programirao pod Windowsima može stvoriti aplikacijski program koji radi pod Windowsima za dva ili tri dana koristeći Visual BASIC. Ali programer visoke klase koji prethodno nije programirao pod Windowsima često mora provesti tjedne, pa čak i mjesece, koristeći C++ kako bi stvorio isti program. Istina, Visual BASIC ima niz značajnih ograničenja. Koristeći okruženja vizualnog dizajna, možete kreirati vrlo složene programe bez upisivanja i jedne linije koda. Međutim, svi programi stvoreni korištenjem tradicionalnih proceduralnih programskih jezika imaju isti nedostatak. Za njih je jedno izvršni kod, a sasvim drugo podaci koje program obrađuje. Doista, programski kod je sadržan u datoteci s nastavkom EXE, a podaci su u posebnim podatkovnim datotekama (obično u tekstualnom ili binarnom obliku u internoj reprezentaciji računala), ili se unose s tipkovnice ili s nekog drugog vanjskog uređaj. Sada postavimo pitanje: što ako korisnik mora dati informaciju o izvršnom programu koja se može smatrati "dodatkom" tekstu programa? Na primjer, želimo da se graf funkcije iscrta na ekranu, au takvom programu pružamo sve potrebne servisne mogućnosti. Međutim, formulu za funkciju mora odrediti sam korisnik, a ne zna se unaprijed kakva će biti. Sasvim je očito da se problemi ove vrste mogu riješiti samo uz pomoć sustava tumača. Ali "morate platiti za sve." Prevodilac prevodi tekst programa u izvršni kod, koji se može izvoditi bez programa prevoditelja. Programi stvoreni na temelju interpretativnih jezika mogu se izvršavati samo pod kontrolom programa interpretatora. Također su sporiji od kompiliranih jer tumačenje zahtijeva dodatno vrijeme. Međutim, u mnogim slučajevima to nije značajno.

Datum nastanka: 1963 Utjecao: ZARADA Upisivanje: netipično dijalekti:

    Applesoft BASIC

    Commodore BASIC

    Microsoft BASIC

Implementacije i verzije:

  • Applesoft BASIC Interpreter u Javascriptu

    Atari Microsoft BASIC I/II

  • Commodore BASIC

    Galaksija BASIC

    Microsoft Visual Basic

  • Visual Basic za aplikacije

BASIC (BASIC - skraćenica za Beginner’s All-purpose Symbolic Instruction Code - univerzalni kod simboličkih instrukcija za početnike; engleski basic - osnovni, osnovni) je obitelj programskih jezika visoke razine.

BASIC su 1963. izumili profesori s Dartmouth Collegea John Kemeny i Thomas Kurtz, a pod njihovim vodstvom implementirao ga je tim studenata. S vremenom, kako su se počeli pojavljivati ​​drugi dijalekti, ovaj "izvorni" dijalekt postao je poznat kao Dartmouth BASIC.

BASIC je dizajniran tako da studenti mogu pisati programe koristeći terminale za dijeljenje vremena. Nastao je kao rješenje problema povezanih sa složenošću starijih jezika, namijenjen "jednostavnijim" korisnicima koje nije toliko zanimala brzina programa, već jednostavno mogućnost korištenja računala za rješavanje problema.

Prilikom dizajniranja jezika korišteno je sljedećih osam načela:

    biti jednostavan za korištenje za početnike;

    biti programski jezik opće namjene;

    pružiti mogućnost proširenja funkcionalnosti dostupnih iskusnim programerima;

    biti interaktivan;

    dati jasne poruke o pogrešci;

    brzo raditi na malim programima;

    ne zahtijeva razumijevanje hardvera;

    biti posrednik između korisnika i operacijskog sustava.

Jezik se djelomično temeljio na Fortranu II, a djelomično na Algol-60, s dodacima koji su ga učinili prikladnim za dijeljenje vremena, obradu teksta i matričnu aritmetiku. BASIC je izvorno implementiran na GE-265 s podrškom za više terminala. Suprotno uvriježenom mišljenju, u vrijeme svog nastanka to je bio kompilirani jezik. Jezik je stekao univerzalnu popularnost pojavom na mikroračunalu Altair 8800. Mnogi programski jezici bili su previše glomazni da bi stali u malu memoriju. Za strojeve s tako sporim medijima kao što su papirna traka, audio kaseta i bez odgovarajućeg uređivača teksta, tako mali jezik kao što je BASIC bio je sjajno otkriće. Godine 1975. Microsoft (tada su bila samo dva - Bill Gates i Paul Allen, uz sudjelovanje Monte Davidova) izdao je Altair BASIC. Za operativni sustav CP/M stvoren je dijalekt BASIC-80 koji je odredio razvoj jezika na duže vrijeme. Tijekom tog razdoblja stvoreno je nekoliko novih verzija BASIC-a. Microsoft je prodao nekoliko verzija BASIC-a za MS-DOS/PC-DOS, uključujući BASICA, GWBASIC i Quick BASIC (Borland je izdao Turbo BASIC 1.0 1985. godine (njegove nasljednike je kasnije prodala druga tvrtka pod imenom PowerBASIC). Na kućnim računalima pojavila su se razna BASIC proširenja, koja obično uključuju alate za rad s grafikom, zvukom, izvršavanje DOS naredbi, kao i alate za strukturirano programiranje. Nekoliko drugih jezika koristilo je dobro poznatu sintaksu BASIC kao osnovu na kojoj je izgrađen potpuno drugačiji sustav (vidi, na primjer, GRASS). Međutim, počevši od kasnih 1980-ih, nova su računala postala mnogo složenija i pružala su značajke (kao što su grafička korisnička sučelja) zbog kojih BASIC više nije bio tako jednostavan za programiranje. BASIC je počeo gubiti tlo pod nogama, unatoč činjenici da je ogroman broj njegovih verzija još uvijek bio u uporabi i prodan. BASIC je dobio drugi život pojavom Visual Basica od Microsofta. Postao je jedan od najčešće korištenih jezika na Microsoft Windows platformi. Kasnije je stvorena varijanta nazvana WordBasic, koja se koristila u MS Wordu do uvođenja Worda 97. Varijanta Visual Basica za aplikacije (VBA) ugrađena je u Excel 5.0 1993., zatim u Access 95 1995., a potom i u sve ostale alati , uključeni u Office paket - 1997. godine. Internet Explorer 3.0 i noviji te Microsoft Outlook uključivali su tumač jezika VBScript. U Puna verzija OpenOffice.org također uključuje BASIC tumač.

Hello, World!: Primjer za QBasic 1.1, QuickBasic 4.50

ISPIS " zdravo , Svijet !"

Faktorijel: Primjer za verzije QBasic 1.1, QuickBasic 4.50

Koristi se iterativna definicija faktorijela. Pri izračunu 13! Dolazi do aritmetičkog prekoračenja, a ponašanje različitih implementacija ovdje se razlikuje: QBasic prijavljuje prekoračenje, dok QuickBasic jednostavno ispisuje negativne vrijednosti. Osim toga, naredba PRINT prema zadanim postavkama ispisuje po jedan razmak prije i iza broja.

DIM f AS LONG f = 1 PRINT " 0 ! ="; f ZA i = 1 DO 16:

f = f * i:

ISPIS i; "!="; f

U proteklih 70 godina programiranje je postalo golemo područje ljudska aktivnost, čiji su rezultati na svoj način praktični značaj sasvim usporedivo s najnoviji rezultati u nuklearnoj fizici ili istraživanju svemira. Ovi rezultati su u velikoj mjeri posljedica pojave i brzog razvoja algoritamskih jezika visoka razina.

Moderni programski jezici visoke razine, kao što su Pascal, C, Ada, Java, C++, C# i drugi, i dalje ostaju najčešći i najmoćniji alat za programere koji razvijaju i sistemski i aplikacijski softver. S pojavom novih zadataka i potreba, funkcionalnost ovih jezika neprestano se proširuje stvaranjem sve naprednijih inačica.

Drugi smjer u razvoju programskih jezika povezan je sa stvaranjem specijaliziranih (problemski orijentiranih) softverskih sustava i okruženja za korisnike koji nisu programeri (tehnolozi, dizajneri, ekonomisti itd.). Primjeri takvih sustava i okruženja su CAD sustavi za razne namjene, automatizirani sustavi za obuku, učenje na daljinu, ekspertni i modelirajući sustavi u ekonomiji i dr. Svrha odgovarajućih problemski orijentiranih jezika koji se koriste u takvim sustavima često se odražava u njihovim nazivima, na primjer: "Jezik za opisivanje krugova tehnološke opreme", "Jezik za opisivanje scenarija učenja", "Jezik za modeliranje situacija" itd.

I programski jezici opće namjene i programski jezici orijentirani na probleme imaju jednu zajedničku stvar - oni jesu

formalni jezici.Što je formalni jezik? U najopćenitijem obliku na ovo pitanje može se odgovoriti na sljedeći način: Jezik - ovo je puno prijedloga, i formalni jezik - to je jezik čije su rečenice građene prema određenim pravilima.

Rečenice su sastavljene od riječi, a riječi od simbola (slova). Poziva se skup svih valjanih znakova abeceda Jezik. U programskim jezicima rečenice obično odgovaraju iskazima (ili uputama), a na tipkovnici računala vidimo abecedne simbole.

I prirodni jezici i programski jezici - beskonačni skupovi. Možete napisati neograničen broj programa u programskom jeziku.

Kako postaviti pravila za konstruiranje rečenica u formalnom jeziku? Pri odgovoru na ovo pitanje krenut ćemo od dva važni pojmovi: sintaksa I semantika Jezik.

Sintaksa jezik određuje strukturu ispravnih rečenica i riječi, au programskim jezicima, među ostalim, prihvatljive strukture programskih tekstova.

Postoje različiti načini za opisivanje sintakse formalnih jezika (drugo poglavlje je posvećeno metodama opisa nastavno pomagalo). Najčešće korišteni programski jezici su Backus oblik - Naura(BPF) i dijagrami sintakse.

BNF je razvio Backus i prvi put je korišten za striktno opisivanje jezika ALGOL-60 1963. Ovaj se oblik koristi i za opisivanje strukture jezika kao cjeline i za opisivanje pojedinačnih jezičnih konstrukata (podskupova jezika) i njegovih elemenata - operatori, identifikatori, izrazi, brojevi itd.

Ispod su primjeri BNF-a koji definiraju sintaksu decimalnih cijelih brojeva i sintaksu aritmetičkih izraza koji sadrže operatore “+” i “*”.

BNF cijelih decimalnih brojeva:

= 0|1|...|9

BNF aritmetičkih izraza:

:= () A

U datim izrazima A označava bilo koji identifikator i tretira se kao simbol abecede od koje je izraz sastavljen.

Na lijevoj strani BNF-a nazivi definiranih elemenata ispisani su u uglastim zagradama. sintaktičke kategorije(pojmovi, jedinice), simbol “:=” znači “je”, “ovo”, “definiran je kao”, simbol “|” znači "ili".

Desna strana BNF-a definira moguće opcije za konstrukciju specifičnih vrijednosti ovih kategorija, u ovom slučaju vrijednosti decimalnih brojeva i specifičnih aritmetičkih izraza. BNF također sadrži abecedu simbola od kojih su te vrijednosti sastavljene. Za decimalne cijele brojeve abeceda je skup (+,-, 0, 1,..., 9), a za izraze skup (A, *, +, (,)}.

Proces građenja značenja sintaktičke kategorije sastoji se od zaključak ove vrijednosti uzastopnim supstitucijama desnih strana BNF pravila u lijeve strane. Ispod su rezultati broja “- 320” i izraza "a+a*a" koristeći odgovarajući BNF:

BNF imaju velike sličnosti s formalne gramatike, koji se koriste u teoriji formalnih jezika (neki ih autori identificiraju).

Upravo je pojava BNF-a potaknula brzi razvoj teorije formalnih jezika i njezinu primjenu na primijenjene probleme u razvoju programskih jezika i dizajnu prevoditelja.

Ako je u razmatranim BNF-ovima svaka sintaktička kategorija s lijeve strane pravila označena sa A, B I S prema tome, a umjesto simbola := koristiti - dobit će se sljedeći oblici:

Za decimalne cijele brojeve:

A->B+B-B B^>CBC C->0 | 11... | 9

Za aritmetičke izraze:

A^A+BB

B->B*SS

C^>(A)a

Ovako su napisana pravila formalne gramatike. Simboli koji označavaju sintaktičke kategorije, u ovom slučaju, B, C u formalnim gramatikama nazivaju se neterminalni simboli, a abecedni simboli su terminal.

U praksi, nakon dobivanja gramatike programskog jezika kao „prve aproksimacije“, potrebno je ispitati njegova svojstva, au nekim slučajevima i izvršiti neke transformacije. To je uglavnom zbog potrebe da se gramatika dovede u oblik pogodan za konstruiranje odgovarajućeg prevoditelja. U procesu izvođenja ovih transformacija, s formalnog gledišta, nije važno koje specifične sintaktičke kategorije i abecedne simbole sadrži BNF. Stoga se u ovoj fazi obično prelazi na formalnu gramatiku i koristi se odgovarajućim metodama teorije formalnih jezika. Pritom ne treba u potpunosti identificirati BNF s formalnim gramatikama. Definicija gramatike u teoriji formalnih jezika ima više opći karakter. Konkretno, mogu se koristiti za opisivanje ovisnosti o kontekstu, koji se ne mogu uvijek izbjeći pri razvoju programskih jezika i koji se ne mogu opisati pomoću BNF-a.

Karakteristična značajka gramatika programskih jezika je prisutnost rekurzije u njima. Rekurzivnost znači da definicija određene sintaktičke kategorije sadrži i samu kategoriju koja se definira (to je tzv. eksplicitna rekurzija). Na primjer, u razmatranim BNF definicijama za kategorije I sadrže ove kategorije na desnoj strani. rekurzija - gotovo neizbježno svojstvo gramatika programskih jezika koje im omogućuje da budu beskonačne. Istodobno, neke vrste rekurzije, o kojima će biti riječi kasnije, značajno kompliciraju proces razvoja odgovarajućih prevoditelja.

Zadržimo se ukratko na drugoj gore spomenutoj metodi opisivanja sintakse jezika pomoću sintaktičkih dijagrama. Neki autori pri opisu jezičnog standarda daju prednost ovoj metodi zbog veće preglednosti. Primjeri dijagrama sintakse mogu se naći u mnogim knjigama o programiranju (na primjer, u). Imajte na umu da su obje metode opisa - i BNF i sintaktički dijagrami ekvivalentni i uvijek možete prijeći s jedne metode opisa na drugu.

Razmotrimo sada koncept semantika jezika. Ako sintaksa jezika određuje strukturu njegovih ispravnih rečenica i tekstova, onda semantika određuje ispravnost njihova značenja. Zauzvrat, ispravnost značenja ovisi o značenju riječi koje čine rečenice. Na primjer, ako u prirodnom jeziku sintaksu rečenice definiramo kao

tada možete konstruirati mnoge rečenice s različitim značenjima. Na primjer, rečenice "auto vozi" i "auto razmišlja" ispravne su sa sintaktičkog gledišta. Međutim, prva rečenica ima ispravno značenje, za drugu se može reći da je besmislena. Dakle, semantika definira skup značenja i prihvatljivih korespondencija između rečenica (teksta) i značenja.

Osim toga, semantika jezika ovisi o svojstvima objekata opisanih u tom jeziku. Da je u razmatranom primjeru automobil opremljen računalom s programima za izračunavanje optimalnih načina i ruta kretanja, tada se druga rečenica više ne bi činila besmislenom.

Slično, u programskim jezicima, sintaktički dobro oblikovan operator dodjele

bit će semantički neispravan ako a ima vrijednost 10.5 (a = 10.5) i b ima vrijednost false (b = false).

Formalni opis semantike programskih jezika pokazao se mnogo težim zadatkom od opisa sintakse. Većina radova posvećena je uporabi matematičke metode u implementaciji programskih jezika pokrivaju upravo pitanja opisa sintakse i konstruiranja metoda parsiranja. U ovom području razvijena je prilično opsežna teorija i metodologija. Istodobno, semantika jezika i semantička analiza ostaju predmetom mnogih studija do danas.

Mnogi aspekti semantike programskog jezika mogu se opisati u obliku popisa semantičkih konvencija koje su opće, neformalne prirode. Na primjer, programeri su upoznati s konvencijama kao što su "svaki identifikator u bloku definiran je jednom", "varijabla mora biti definirana prije nego što se može koristiti" itd.

Primjer uspješne primjene teorije formalnih jezika u području semantike i semantičke analize je aparat gramatika prijevoda atributa, koji omogućuje uzimanje u obzir semantičkih konvencija u opisu jezika i praćenje njihove usklađenosti tijekom prijevod programa.

Što se tiče prognoza za budućnost daljnji razvoj programskih jezika, postoji prilično širok raspon mišljenja, čak i dijametralno suprotnih. Neki autori vjeruju da svaki jezik ima svoje semantičke značajke koje ga čine prikladnim i privlačnim za određeno područje programiranja (na primjer, Prolog i Lisp usmjereni su na rješavanje problema umjetna inteligencija; Fortran je najučinkovitiji u rješavanju računalnih problema; COBOL - koristi se za ekonomske proračune itd.). Stoga biste trebali stvoriti sve nove jezike s određenim mogućnostima ili povremeno ažurirati postojeće verzije, umjesto da pokušavate stvoriti univerzalni jezik. U prilog ovom gledištu navodi se argument da su svi ambiciozni projekti stvaranja univerzalnog jezika propali (dovoljno je prisjetiti se neispunjenih nada povezanih s razvojem ADAiPL-1 jezika).

Drugi dio autora smatra da je od objavljivanja standarda prvih programskih jezika - Fortran, Algol, itd. - u 60-ima. XX. stoljeća došlo je do “stabilizacije” jezika u smislu da su jezične konstrukcije slične namjene u različiti jezici imaju gotovo istu semantičku osnovu, unatoč razlikama u vokabularu i sintaksi. Dakle, čim bude moguće formalno definirati tu zajedničku semantičku bazu, moći će se početi stvarati univerzalni jezik, koji više neće biti programski jezik u tradicionalnom smislu, već praznine semantičkih struktura. Program će biti predstavljen kao skup ovih konstrukata, a uređivač teksta će ustupiti mjesto strukturiranom uređivaču. Kao primjer djelomične implementacije ovog pristupa navedena su okruženja za vizualno programiranje Delphi, C++ Builder itd.

21. stoljeće je vrijeme kada je poznavanje informacija najvažnija konkurentska prednost u bilo kojem području. Međutim, ono neće donijeti nikakvu korist ako nije izraženo na jeziku razumljivom onima kojima je namijenjeno ili ako ne postoji prevoditelj koji bi mogao prenijeti njegovo značenje primatelju.

U ovom trenutku na zemlji živi oko 2000 ljudi. Njihovo obilježje, prije svega, je jezik.

Uz govorne (prirodne) jezike, čovječanstvo je stvorilo mnoge umjetne jezike. Svaki od njih je dizajniran za rješavanje specifičnih problema.

Takvi znakovni sustavi uključuju formalne jezike, čiji su primjeri prikazani u nastavku.

Definicije

Prije svega, formulirajmo što je jezik. Pod ovom se riječju obično podrazumijeva znakovni sustav koji služi za uspostavljanje komunikacije među ljudima i spoznaje.

Osnova većine umjetnih i prirodnih jezika je abeceda.

To je skup simbola koji se koriste za sastavljanje riječi i fraza.

Jezik karakterizira:

  • skup korištenih znakova;
  • pravila za sastavljanje "riječi", "izraza" i "teksta" od njih;
  • skup pravila (sintaktičkih, pragmatičkih i semantičkih) za uporabu složenih konstrukcija.

Obilježja prirodnih jezika

Kao što je već spomenuto, svi se jezici konvencionalno dijele na umjetne i prirodne. Mnogo je razlika među njima.

Prirodni jezici uključuju govorne jezike. Njihove karakteristike uključuju, između ostalog:

  • višeznačnost većine riječi;
  • postojanje sinonima i homonima;
  • prisutnost nekoliko naziva za istu stavku;
  • postoje iznimke od gotovo svih pravila.

Sve ove karakteristike glavne su razlike između prirodnih znakovnih sustava i formalnih jezika. Primjeri dvosmislenosti u riječima i izjavama poznati su svima. Dakle, riječ “eter”, ovisno o kontekstu, može značiti i tvar i radijsko ili televizijsko emitiranje.

Istodobno, glavne funkcije govorni jezici su:

  • komunikacija;
  • kognitivna aktivnost;
  • izražavanje emocija;
  • utjecaj na sugovornika (dopisnika, ako govorimo o dopisivanju).

Obilježja umjetnih jezika

Umjetne jezike stvaraju ljudi za posebne svrhe ili za određene skupine ljudi.

Jedna od glavnih karakteristika umjetnih jezika je nedvosmislena definicija njihovog vokabulara, kao i pravila za dodjeljivanje značenja njima i oblikovanje izraza.

Formalni jezici i gramatike

Jezik, bio on prirodan ili umjetan, može postojati samo ako ima skup posebnih pravila. Pritom treba osigurati dosljedan, kompaktan i točan prikaz odnosa i svojstava predmetnog područja koje se proučava. Ako su striktno formulirani, onda govore da je to jezik. Primjeri takvih znakovnih sustava su programski jezici, iako, strogo govoreći, oni zauzimaju određeni srednji položaj (vidi dolje).

Shema za izgradnju formalnog znakovnog sustava je sljedeća:

  • odabrana je abeceda (skup početnih znakova);
  • navedena su pravila za konstruiranje izraza (sintakse) jezika.

Opseg primjene

Formalna logika, programiranje, itd.) koriste se u procesu znanstveno istraživanje. Oni su bolji od prirodnih u prezentiranju znanja i sredstvo su objektivnije i točnije razmjene informacija.

Formalni jezici uključuju sve poznate sustave matematičkih i kemijskih simbola, Morseov kod, notni zapis itd.

Osim toga, naširoko se koriste formalni programski jezici. Njihov brzi razvoj započeo je sredinom 20. stoljeća, u vezi s pojavom računalne tehnologije.

Jezik formalne logike

Osnova svakog programskog jezika je matematička. Ona se pak oslanja na znakovni sustav formalne logike.

Kao znanost, logiku je stvorio Aristotel. Također je razvio pravila za preoblikovanje izjava koje zadržavaju svoju istinitu vrijednost bez obzira na sadržaj koncepata uključenih u te izjave.

Formalna logika bori se s "nedostacima" prirodnih jezika povezanih s dvosmislenošću nekih izjava itd. U tu svrhu operacije s mislima zamjenjuju se radnjama sa znakovima formalnog jezika. To eliminira svaku nesigurnost i omogućuje vam da točno utvrdite istinitost izjave.

Značajke programskih jezika

Kao što je već spomenuto, uz neke rezerve mogu se klasificirati kao formalni.

S potonjim ih spajaju mnoga sintaktička pravila, a s prirodnima neke ključne riječi i konstrukcije.

Stvaranje programskog jezika zahtijeva definiranje skupa valjanih simbola i ispravnih jezičnih programa te značenja svakog ispravnog programa. Ako se prvi zadatak može riješiti formalizacijom, u slučaju drugog ovi pristupi ne funkcioniraju.

Mnogi važeći znakovi u programskim jezicima su znakovi koji se mogu upisati na tipkovnici. Oni predstavljaju prvi dio ASCII tablice kodiranja.

Gramatičari

Programski jezici, kao i svaki drugi, imaju gramatiku. Ovaj pojam odnosi se na opis metode sastavljanja rečenica. Opisane su gramatike različiti putevi. U slučaju programskih jezika, to su pravila koja su određena uređenim parovima nizova dviju vrsta simbola: onih koji definiraju sintaktičke konstrukcije i semantičkih ograničenja. Pri definiranju gramatika najprije formalno navode pravila za izgradnju sintaktičkih konstrukcija, a zatim definiraju semantičke u nekom od prirodnih jezika.

Pravila se bilježe u grafičkom obliku pomoću posebnih dijagrama. U početku je ovaj pristup korišten pri stvaranju jezika Pascal. Međutim, tada se počeo naširoko koristiti u drugima.

Klasifikacija programskih jezika

Trenutačno ih je, zajedno s “dijalektima”, nekoliko tisuća. Klasificiraju se na proceduralne i deklarativne. U jezicima prvog tipa, transformacija podataka specificirana je opisom slijeda radnji koje se na njima izvode, dok u drugom - odnosima. Postoje i druge klasifikacije. Na primjer, programski jezici se dijele na funkcionalne, proceduralne, objektno orijentirane i logičke. Ako problemu pristupimo striktno, tada nijedna klasifikacija ne može biti objektivna. Uostalom, značajan dio programskih jezika ima mogućnosti formalnih sustava nekoliko vrsta odjednom. S vremenom će se rubovi vjerojatno još više zamutiti.

Sada možete odgovoriti na pitanje: "Koje formalne jezike znate?" Znanstvenici ih nastavljaju poboljšavati kako bi omogućili rješavanje raznih praktičnih i teorijskih problema koji se trenutno smatraju nerješivima.

Prirodni programski jezici(EPL) određuju sljedeći korak u razvoju programskih jezika, za razliku od upitni jezicičinjenica da je korisnik bilo koje razine oslobođen potrebe za svladavanjem bilo kakvih posebnih rječnika, gramatike i sintakse – ponude ELP-ovi su vrlo slični rečenicama u običnom ljudskom govoru. ELP-ovi još više udaljavaju korisnika od zrakoplova i njegovog softvera, značajno povećavajući intelektualnu razinu sučelja prvi S računalni resursi. Trenutno se računala ograničenih mogućnosti uspješno koriste na osobnim računalima, kao npr Clout, Q&A, Pametan retriver, HAL itd. Glavni razvoj ENL-a povezan je sa zadacima umjetne inteligencije i intelektualizacijom sučelja u SUBZ. U tom su smjeru različite vrste elektroničkih jezičnih sučelja s računalima dobile izravno praktično značenje (osobito u vezi s masovnom upotrebom osobnih računala). Iz ENL-a ove vrste može se primijetiti regulirani jezici (izbornici, upitnici, upute i sl.), koji igraju veliku ulogu u intelektualizaciji računalnog sučelja pri korištenju raznih vrsta softvera; igraju glavnu ulogu u raznim sustavima intervjuiranje,obrazovni, stručni itd. međutim njihova je uporaba strogo regulirana u određenim granicama, a u slučaju prijenosa sustava iz reguliran ELP za druge vrste računala često zahtijeva značajne izmjene. Stoga je za fleksibilniju i prirodniju komunikaciju između korisnika i računala primjereniji prirodni jezik.

Problem s korištenjem prirodni jezik za organiziranje sučelja s intelektualac VS je na sadržajnoj razini zanimljivim ilustrativnim primjerima dobro prikazan u stručnoj literaturi. Međutim, o ovom pitanju treba dati jednu značajnu napomenu. Često se uzima zdravo za gotovo da prirodni jezik je najbolji način organiziranja korisničkog sučelja s računalom. Ova se pretpostavka čak koristi kao osnova za projekt računala 5. generacije. Međutim, nama se ne čini tako očito.

U nizu slučajeva prirodni jezik je manje izražajan grafički, pažljivo izrađen formalan jezik domene može biti izražajniji prirodni jezik (također imajući puno nedostaci). Štoviše, mnoga predmetna područja (matematika, fizika, kemija, biologija itd.) imaju svoje lingvističkisleng, u nekim slučajevima bitno drugačiji od običnog prirodnog jezika. Stoga, razvijen jezično sučelje može biti simbioza prirodni I formalan jezike ili predstavljaju hijerarhija Jezici: prirodni Jezik - formalno (strukturirano) računalni jezik. U svakom slučaju, ovaj problem je još jako daleko od potpunog rješenja.

Predavanje br. 34 aplikativni softver

Plan predavanja.

1. Računalni aplikacijski softver.

2. Klase aplikacijskih paketa.

3. Osnovne primjene.

4. Karakteristike kvalitete softvera.

34.1. Računalni aplikacijski softver

U prethodnom odjeljku, na najopćenitijoj razini, obrađena je struktura softvera čiju osnovu čini softver različitih vrsta, namjena i organizacija. Zbog intenzivne invazije osobnih računala na ljudsku aktivnost i masovnosti njihove uporabe, udio softvera u računalnom softveru ubrzano raste. S obzirom na važnost ove komponente, koja pruža sučelje visoke razine za neprofesionalnog korisnika s računalnim resursima računala, razmotrit ćemo je nešto detaljnije, na temelju tri razine:

(1) načelo organiziranja JPP-a;

(2) zahtjevi za obuku korisnika;

(3) osnovni moderni bendovi PPP.

Jedan od karakteristične značajke moderno JPP je korištenje principa sinteza programe rada iz potprograma na temelju sadržaja opisi zadatke u problemski orijentiranom jeziku koji je blizak konceptima i pojmovima korisnikova problemskog područja. Ovakvim pristupom korisnik, kroz poseban jezik za formiranje paketa(JFP) smislen opisuje pojedinačni zadatak ili klasu zadataka (zahtijeva rješenje), oblikovanje generacijski program specifični PPP iz alata fiksni ili proširiv softver okoliš(riža. ZZa). Na temelju ovog programa generira se PPP za određenu aplikaciju s vlastitim jezik unosa(VY) komunikacija s korisnikom. Nakon izrade PPP-a, korisnik radi s njim u procesu rješavanja svojih problema. U pravilu se opisani princip organizacije koristi za usmjeren na probleme PPP, kada je raspon problema koje rješavaju prilično jasno definiran i zadaci su povezani nekim zajedničkim karakteristikama, na primjer, numeričke metode, statistička analiza, modeliranje u određenom predmetnom području i sl. Raspon JPP takve organizacije vrlo je širok – od knjižnica organiziranje potprograma određenog fokusa (na primjer, statistička analiza) za kompleks softversko okruženje (sl. 33), koje zahtijeva poseban nuklearni jezični jezik za formalni opis predmetnog područja na koje treba biti usmjeren (generirano) PPP. Prilikom izrade određenog paketa koriste se kao vlastito sredstvo softversko okruženje, i opet programabilan.

Stvaranje JPP-a prilično je dugotrajan i radno intenzivan proces koji zahtijeva korištenje posebnih alata. Međutim, u općem slučaju takvi sustavi ispadaju vrlo složeni, a paketi koje stvaraju prilično su daleko od potrebne učinkovitosti. Stoga je jedan od načina otklanjanja ovih nedostataka stvaranje specijalizirana instrumentalni sustavi usmjereni na obitelji usmjeren na probleme IFR sa homogena jezici unosa i identičan principi rada. Među domaćim proizvodima ove vrste možemo primijetiti meta sustavi SATURN I PAKET. Dakle, u PAKET kao i drugi slični sustavi, razlikuju se gornje dvije faze: opisželjeni JPP na posebnom NFP (podsustavu Konstruktor) I generacija PPP sa svojim jezikom unosa (podsustav pretprocesor); ovo osigurava proizvodnost programiranja u glavnim fazama generacija paket: (1) opis klase problema koje rješava paket i metoda za njihovo rješavanje; (2) stvaranje ulaznog jezika PPP-a; (3) programiranje i uklanjanje pogrešaka potrebnih programskih modula.

Uz ovu tehnologiju, razvoj specifičnog JPP-a započinje opisom na NFP problema koje treba riješiti u smislu subjekt područja, tj. programiranje funkcionalnih svojstava željenog objekta – PPP provodi se pomoću posebnog metajezik, uključujući ulazni jezik na kojem će korisnik naknadno morati komunicirati sa željenim paketom. Rezultat izvršavanja prevedenog YFP programa je željeni PPP sa zadanim ulazni jezik. Dakle, ova tehnologija općenito pretpostavlja prisutnost dvije razine korisnika - sistemski, generiranje JPP-a s danim predmetnim područjem, i problematično, koristeći stvoreni PPP kroz svoj ulazni jezik blizak pojmovima predmetnog područja ili do prirodni Jezik. Naravno, u slučaju prilično jednostavnog softverskog okruženja, usko usmjerene klase problema koje treba riješiti i jednostavne YFP funkcije sistemski I problematično korisnik može biti ista osoba.

Trenutno računalno eksperimentiranje(CE) postaje jedno od glavnih sredstava istraživanja velikih znanstvenih, inženjerskih, tehničkih i društvenih problema: u astronautici, nuklearnoj fizici i energetici, predviđanju itd., složenost što ne dopušta s jedne strane da ih se dovoljno rigorozno proučava analitički, a s druge strane, istraživati ​​vrlo skupim eksperimentalnim metodama. FE metoda podrazumijeva korištenje PPP kompleta za različite namjene od strane problematičnih korisnika, koji su zbog eksperimentalne prirode posla u velikoj mjeri podložni raznim promjenama. Razmatrani princip organiziranja JPP-a prilično je fleksibilan adaptivne sposobnosti automatizirati ovu vrstu rada, dobro ispunjavajući i zadatke modifikacije i proširenje izvornog softverskog okruženja paketa. Kako bi se povećala intelektualna razina sučelja s paketom, posebno kada ga na osobnom računalu koristi masovni korisnik, važna uloga igra ga grafički komponenta, koja je također određena u razv metasustavi oblikovati I generacija PPP. Uz to povećati logično stvara se razina sučelja već postojećih popularnih PPP-ova grafički metasustavi, znatno se proširuje GUI pakete, čineći ga prijateljskijim.

Za razliku od razmatrane organizacije JPP-a, koja osigurava njihovu fleksibilnost i prilagodljivost predmetnom području te postavlja niz zahtjeva za profesionalnu razinu korisnika, za masovnog korisnika obično se koristi tvrd organizacija koja ga sprječava u modificiranju paketa. Takva organizacija ima dvije glavne izvedbe: (1) visoku logično razini jezik unosa paketa(VLP), orijentiran na korisnika i domenu, i unutarnje jezik paketa, koji vam omogućuje stvaranje modula u njegovom okruženju koji pružaju funkcije proširenja paketa, kao i stvaranje dokumenata za specifične primjene paketa; (2) sučelje s paketom pruža se samo na razini VLP-a usmjerenog na probleme. U oba slučaja praksa stvaranja VLP-a za paket koristi dva glavna pristupa: (1) stvaranje jezika temeljenog na već postojećem VLP-u (koji je u pravilu također implementacijski jezik paket) i (2) razvoj izvornik jezik unosa. Na prvi pristup značajno pojednostavljuje implementaciju ulazni jezika, dok za neprofesionalnog korisnika dodatne poteškoće nastaju u svladavanju paketa. Drugi pristup zahtijeva, u nekim slučajevima, znatno veće troškove razvoja ulazni jezik, međutim, olakšava učenje i korištenje (jezik izbornika, elementi prirodnog stručnog jezika, upitni jezik, dijaloški grafički jezik itd.).

pri čemu domet Orijentacija VLP-a na korisnika je vrlo široka - od korisnika početnika do profesionalca u određenom području. Na primjer, igrica paketi imaju visok koncept grafički sučelje i ne zahtijevaju poseban razvoj; paketi uređivači teksta također imaju razvijen jezik sustavi izbornika, dovoljno visoka konceptualna razina (primjerice paket gospođa riječ); problemski orijentirani paketi (npr. MathCAD, Reduce. Mathematica pod uvjetom ulazni jezik namijenjen korisniku koji poznaje matematički jezik. Konačno, interijer Jezik paketa prvenstveno je usmjeren na programske funkcije koje paket ili programiranje nisu izravno podržane dokumenata za svoje specifične primjene. Često kao unutarnje jezik korišten jezik implementacija paket ili njegove izmjene (na primjer paketi Smanjiti. Mathematica i tako dalje.); međutim, u nekim slučajevima interijer jezik je usmjeren prema predmetno područje paket ima ulazni jezik koji se temelji na jednostavnom i prijateljskom sustavu izbornika i interijer SALT jezik sličan C-u , što vam omogućuje jednostavno i brzo stvaranje i izvršavanje SLT dokumenata (programa, modula za specifične aplikacije paketa) u okruženju paketa]. Složenost interni jezici PPP su različiti i zahtijevaju određenu programersku vještinu za njihovo svladavanje; međutim, oni vam omogućuju stvaranje naprednih biblioteka dokumenata, čije izvođenje u okruženju paketa dopušta značajno proširiti njegove funkcije i područje primjene.

Konačno, kruta organizacija u kombinaciji s predmetno orijentiranim VLP-om usmjerena je na pakete relativno malog volumena ili pak pakete s posebnim fokusom, ali masovne primjene. U pravilu, jezici poput izbornik, dijaloška grafika, upute i drugi, namijenjeni neprofesionalnom korisniku. Primjer ovoga organizacije mogu poslužiti jednostavni paketi za uređivanje teksta, posebni paketi itd. U isto vrijeme, oni razvijeniji od njih imaju makro-sredstva koja im omogućuju formalizaciju na razini makronaredbe najčešće korišteni sekvence paketne operacije (npr ChiWriter, gđa Riječ, Riječ Savršen u odnosu na. itd.).

Ovisno o svojoj organizaciji paketi dopuštaju različite razine i vrste proširenja s korisnička strana: ovisno o mogućnosti puna generiranje paketa za specifične uvjete korištenja (uzimajući u obzir mogućnost proširenja svog programskog okruženja) dok ne prestane mogućnost proširenja paketa. Međutim, u većini slučajeva moderni IFR-ovi dopuštaju ekstenzije, od kojih za problematičnog korisnika najviše prirodni način je stvoriti knjižnicama(dokumenti, programi, moduli, makronaredbe) do unutarnje jezik paketa, odlučujući zadaci u nekom predmetnom području i izvršava se u okruženju samog paketa. Prihvaća se niz paketa proširenje svoje sposobnosti stvarajući oboje vanjski(u odnosu na glavne module paketa), i ugrađeni funkcije. Međutim, za svrhe kompatibilnost paketa, najprikladnije je proširiti paket zbog njegove vanjski funkcije i alati koji korisniku ne dopuštaju izmjene (uz određene rezerve) Osnovni, temeljni dio paketa koji isporučuje i održava programer.

Većina suvremenih PPP zahtijeva operaciju prije uporabe. instalacije, koji se sastoji u prilagodbi paketa za specifične uvjete operacija (konfiguracija hardvera, način rješavanja problema itd.). U pravilu se instalacija provodi jednom i provodi se bilo koje unutarnje paket znači (Ms Word, Quattro itd.), ili kroz poseban komunalije (Sprint, Mathematica i tako dalje.). Za jednostavne pakete inicijalizacija, u pravilu se izvršava automatski svaki put kada se učitaju pomoću operativnog sustava (Okvir, AutoSketch i tako dalje.).

Dokumentacija, isporučen s paketom mora sadržavati preporuke za njegovu ugradnju za posebne uvjete uporabe. Razmotrivši tri Ukratko ćemo razmotriti osnovne principe organiziranja JPP-a funkcionalni punjenje paketa, što je razina datoteke V Općenito, može se predstaviti kao: (1) moduli osiguravanje osnovnih funkcija paketa; (2) konfiguracijske datoteke; (3) pomoćne programe opće namjene i proširenja funkcija paketa; (4) specijalizirana baza podataka; (5) knjižnica dokumenata za njihovo izvođenje u okruženju paketa; (6) datoteke koje sadrže pomoć, informacije o licenciranju za paket, kao i dokumentaciju. U pravilu, u svim modernim JPP može se pratiti navedeno strukturiranje njihov datoteka sustava.

Brojni poznati paketi (Stručnjak Izbor, Mathematica, MathCAD, gđa Excel itd.) također se isporučuju na razini ilustrativnih i/ili verzija za obuku, koje su funkcionalno ograničene u odnosu na glavni paket, ali vam omogućuju ilustriranje paketa na djelu, kao i podučavanje osnovama rada u njegovom okruženju, koje u brojnim slučajevima omogućuje vam da napravite informiraniji izbor ovih sredstava za kasniju komercijalnu upotrebu.

Prva stvar po kojoj se jedan programski jezik razlikuje od drugog je njihova sintaksa. Glavna svrha sintakse je osigurati notaciju za razmjenu informacija između programera i prevoditelja. Međutim, pri razvoju detalja sintakse često se polazi od sekundarnih kriterija, čija je svrha učiniti program lakim za čitanje, pisanje i emitiranje, te učiniti ga nedvosmislenim. Ako je jednostavnost čitanja i pisanja programa neophodna za korisnika programskog jezika, onda su jednostavnost prijevoda i odsutnost razlika u jeziku relevantni za potrebe prevoditelja. Ti su ciljevi općenito kontradiktorni, a pronalaženje prihvatljivog kompromisa u njihovom rješavanju jedan je od središnjih zadataka razvoja programskog jezika.

Razvoj novog programskog jezika počinje definiranjem njegove sintakse. Da bismo opisali sintaksu programskog jezika, također nam je potrebna neka klasa. Jezik namijenjen opisivanju drugog jezika naziva se metajezik. Jezik koji se koristi za opisivanje sintakse jezika naziva se metasintaktički jezik. U metasintaktičkim jezicima koristi se poseban skup konvencionalnih znakova koji tvori notni zapis ovog jezika.

Povijesno gledano, prvi metasintaktički jezik koji se u praksi koristio za opisivanje sintakse programskih jezika (posebno Algola-60) jesu normalne forme Backus, skraćeno BNF - normalna forma Backus ili forma Backus-Naur. Glavna svrha Backus obrazaca je u sažetom i kompaktnom obliku prikazati strogo formalna i nedvosmislena pravila za pisanje osnovnih konstrukata programskog jezika koji se opisuje.

Formalna definicija sintakse programskog jezika obično se naziva gramatikom.

Formalni jezici i gramatike

U početku se znanost o jezicima - lingvistika - svodila na proučavanje specifičnih prirodnih jezika, njihovu klasifikaciju te utvrđivanje sličnosti i razlika među njima. Pojava i razvoj metamatematike, koja proučava jezik matematike, rad na proučavanju komunikacije životinja i druga istraživanja dovela su 30-ih godina prošlog stoljeća do znatno šireg koncepta jezika, u kojem se pod jezikom podrazumijeva svako sredstvo komunikacije koje se sastoji od:

sustav znakova, tj. skupovi valjanih nizova znakova;

mnoga značenja ovog sustava;

korespondencija između nizova znakova i značenja, čineći dopuštene nizove znakova “smislenim”.

Znakovi mogu biti slova abecede, matematički simboli, zvukovi itd. Matematička lingvistika razmatra samo takve sustave znakova u kojima su znakovi simboli neke abecede, a nizovi znakova tekstovi, tj. jezici se promatraju kao proizvoljni nizovi smislenih tekstova. U ovom slučaju pravila koja definiraju skup tekstova čine sintaksu jezika, a opis skupa značenja i korespondencija između značenja i tekstova čine semantiku jezika. Semantika jezika ovisi o prirodi objekata opisanih jezikom, a načini proučavanja različiti su za različite vrste jezika. Sintaksa jezika, kako se pokazalo, u manjoj mjeri ovisi o svrsi jezika i može se proučavati metodama neovisnim o sadržaju i svrsi jezika. Matematički aparat za proučavanje sintakse jezika naziva se teorija formalnih gramatika. Sa stajališta sintakse jezik se ovdje više ne shvaća kao sredstvo komunikacije, već kao skup formalnih objekata – nizova abecednih simbola. Izraz "formalno" naglašava da se objekti i operacije na njima razmatraju čisto formalno, bez ikakve smislene interpretacije objekata. Reproducirajmo glavne pojmove i definicije ove teorije.

Slovo (ili simbol) je jednostavan nedjeljiv znak; mnoga slova tvore abecedu. Abecede su skupovi i stoga se na njih može primijeniti skupovno-teorijski zapis. Lanac je uređen niz slova abecede. Lance ćemo nazivati ​​i riječima. Skup svih mogućih lanaca (riječi) preko abecede A naziva se zatvaranje A i označava se s A*.

Skup A* naziva se iteracija abecede A.

Ako se nizovi sastoje od ponovljenih slova, tada se koristi stenografski zapis kako bi se pokazalo da niz treba smatrati proizvodom slova abecede.

Pri transformaciji jednog lanca u drugi koristi se koncept podlanca.

Alternativni skup pojmova za slovo, abecedu ili niz (riječ) je skup: riječ, rječnik, odnosno rečenica. Skup lanaca (ili rečenica) naziva se jezik. Formalno, jezik je L preko abecede A.

Dakle, koristeći gornju terminologiju, programski jezik za danu abecedu A je podskup skupa A* koji uključuje samo one rečenice koje se, zahvaljujući vanjskim informacijama o njihovoj semantici, smatraju smislenim, tj. zadovoljiti sintaksu programskog jezika.

Gornja definicija formalnog jezika kao bilo kojeg podskupa A* je općenita: ne dopušta nam da među mnogim jezicima razlikujemo njihove pojedinačne klase koje se koriste u praksi.

Sustavno korištenje matematičkih metoda za opisivanje programskih jezika datira iz 1960-ih. Tada je otkriveno da Backusovi oblici, koji su korišteni za opisivanje sintakse jezika ALGOL-60, imaju strogo formalno opravdanje korištenjem sredstava matematičke lingvistike. Od tog vremena počinje povijest razvoja i primjene formalnog matematičkog aparata - teorije formalnih jezika i gramatika - za dizajn i konstrukciju prevoditelja.

U obliku Backus opisane su dvije klase objekata: prvo, osnovni simboli programskog jezika i, drugo, imena konstrukata opisanog jezika, odnosno takozvane metajezične varijable.

Formalna definicija gramatike

Backus-Naurov oblik

Gramatika je definirana na sljedeći način:

VT - skup terminalnih simbola (skup abecednih simbola);

VN - skup neterminalnih simbola (simboli koji definiraju jezične koncepte

P - skup pravila;

S je ciljni simbol gramatike, aksiom.

Razmotrimo formalni opis Backusove gramatike za decimalne cijele brojeve.

G((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, +, -), (<число>, <цифра>), P,<число>)

P - pravilo za generiranje jezičnih leksema:

<число> -> [(+,-)]<цифра>[<цифра>]

<цифра> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9.

Neobavezni element unutar pravila nalazi se u uglatim zagradama [...].

Alternativni elementi označeni su okomitim popisom opcija u vitičastim zagradama (...).

Izborne alternativne opcije označene su okomitim popisom opcija u uglatim zagradama [...].

Element koji se ponavlja označen je popisom jednog elementa (uključenog u vitičaste ili uglate zagrade ako je potrebno) iza kojeg slijedi uobičajena tri točke....

Obavezne ključne riječi su podvučene, ali neobavezne riječi smetnji nisu.

Backus forme predstavljaju formalni opis jezika i one su, u biti, potaknule istraživače na uvođenje matematičkih alata za opis sustava i istraživanje programskih jezika, korištenje matematičkog aparata kao temelja sintaktičke analize u prevoditelju, što je kasnije razvijeno. u različitim metodama sintaktičke analize temeljene na formalnim sintaktičkim definicijama.

Treba napomenuti da BNF ne dopušta opisivanje ovisnosti o kontekstu u programskom jeziku. Na primjer, takvo ograničenje Pascal programa kao što je "identifikator se ne može opisati dva puta u istom bloku" ne može se opisati korištenjem BNF-a. Ograničenja ove vrste bliža su drugoj karakteristici jezika - semantici. Stoga se ovdje koriste druga sredstva, općenito nazvana metasemantičkim jezicima. Međutim, u pravilu, jezgra ovih jezika je isti BNF.

Značajka mnogih metajezičnih formula je prisutnost rekurzija u njima, tj. korištenje samih opisanih struktura za opisivanje struktura. Rekurzija može biti eksplicitna ili implicitna. Eksplicitna rekurzija pojavljuje se, na primjer, u pravilu 2 u gornjem popisu pravila opisa decimalni broj. Implicitna rekurzija prisutna je u slučaju kada se pri konstruiranju konstrukcije u nekom koraku koristi metajezična varijabla koja označava samu tu konstrukciju.

Prisutnost rekurzija otežava čitanje i razumijevanje metajezičnih formula, ali to je možda jedini način koji omogućuje, korištenjem konačnog broja pravila, opisivanje jezika koji može sadržavati beskonačan broj nizova osnovnih simbola. Programski jezici su beskonačni - u njima se može napisati beskonačan broj ispravnih programa, a kada se njihova sintaksa opisuje pomoću BNF-a, uvijek će biti eksplicitnih ili implicitnih rekurzija.

U praksi se za opisivanje sintakse programskih jezika koriste i drugi metajezični jezici. Jedna od svrha njihove upotrebe je eliminirati dio neprirodnosti BNF reprezentacije općih sintaktičkih konstrukcija za neobavezne, alternativne i ponavljajuće elemente pravila.

Teorija formalnih gramatika bavi se opisom, prepoznavanjem i obradom jezika. Omogućuje vam da odgovorite na niz primijenjenih pitanja. Na primjer, mogu li se brzo i lako prepoznati jezici iz neke klase Z; pripada li dati jezik klasa Z; Postoje li algoritmi koji bi odgovorili na pitanja poput: “Pripada li lanac a jeziku L ili ne?” itd.

Općenito, postoje dva glavna načina za opisivanje pojedinačnih klasa jezika:

korištenjem generativnog postupka;

koristeći postupak prepoznavanja.

Prvi od njih specificiran je korištenjem konačnog skupa pravila, zvanih gramatika, koja generiraju točno one lance koji pripadaju jeziku L.

Drugi je uz pomoć nekog uređaja za raspoznavanje apstrakta (automat).

Pri izradi prevoditelja koriste se obje ove metode: gramatika kao sredstvo za opisivanje sintakse programskog jezika i automat kao model algoritma za prepoznavanje jezičnih rečenica, koji se koristi za izgradnju prevoditelja. U ovom slučaju, metodički (i tehnološki), prvo se konstruira gramatika, a zatim se iz nje, kao izvora, gradi algoritam za prepoznavanje.

Treba napomenuti da iako generativna gramatika opisuje proces generiranja lanaca jezika L(G), ovaj opis nije algoritamski - gramatici nedostaje jedno od glavnih svojstava algoritma - determinizam, tj. specifičan redoslijed primjene pravila gramatičke zamjene nije fiksan. To osigurava kompaktan opis jezika. Općenito, takav algoritam nabrajanja može se popraviti na različite načine, ali to nije potrebno za preciznu definiciju jezika.

Dakle, formalna gramatika G potencijalno specificira skup algoritama za generiranje jezika.

Praktična primjena gramatika povezana je s rješavanjem problema prepoznavanja. Problem prepoznavanja je rješiv ako postoji algoritam koji u konačnom broju koraka daje odgovor na pitanje pripada li proizvoljni lanac nad glavnim rječnikom neke gramatike jeziku koji ta gramatika generira. Ako takav algoritam postoji, onda se jezik naziva prepoznatljivim. Ako, osim toga, broj koraka algoritma za prepoznavanje ovisi o duljini lanca i može se procijeniti, jezik se naziva lako prepoznatljivim. Inače, nema smisla govoriti o izgradnji prevoditelja za neprepoznati programski jezik. Stoga se u praksi smatraju takve posebne klase generativnih gramatika koje odgovaraju prepoznatljivim, au većini slučajeva i lako prepoznatljivim jezicima. Najvažnije klase takvih jezika mogu se definirati u okviru klasifikacije jezika koju je 1959. predložio američki lingvist N. Chomsky (Chomsky klasifikacija). Predložio je klasificiranje formalnih jezika prema vrsti pravila gramatika koje ih generiraju:

Razred 0. Gramatike s frazalnim ustrojem. Može poslužiti kao model prirodnih jezika. One su najteže praktična aplikacija nemaju prevoditelje za gradnju.

Klasa 1. Gramatike osjetljive na kontekst. Prilikom konstruiranja rečenica, neterminalni simbol može se zamijeniti drugim, uzimajući u obzir kontekst. Na temelju takvih gramatika može se izvršiti automatizirani prijevod s jednog prirodnog jezika na drugi.

Klasa 2. Gramatike bez konteksta. Zamjena bez terminala događa se bez uzimanja u obzir konteksta. CS gramatike igraju glavnu ulogu u formalnom proučavanju sintakse programskih jezika i konstrukciji bloka parsiranja prevoditelja.

Razred 3. Redovne gramatike. Jezici 3. klase nazivaju se jezici s konačnim brojem stanja ili automatski (regularni) jezici, a gramatike koje ih generiraju nazivaju se automatske gramatike (A-gramatike). A-gramatike koriste se uglavnom u fazi leksičke analize.

Glavne klase jezika mogu se definirati klasama apstraktnih uređaja za prepoznavanje (automata), koji također tvore odgovarajuću hijerarhiju.

Od četiri klase gramatika, kontekstno-slobodne gramatike su najvažnije kada se primjenjuju na programske jezike. Uz njihovu pomoć možete definirati većinu, iako ne sve, sintaktičke strukture programskog jezika.

Prema vrstama gramatika, jezici se dijele na 4 vrste:

<тип 0>- jezici sa strukturom fraze. Ovom tipu pripadaju svi prirodni jezici.

<тип 1>- jezici osjetljivi na kontekst. Jezici i gramatike koriste se u analizi i prijevodu tekstova na prirodnim jezicima. Na temelju takvih gramatika može se izvršiti automatizirani prijevod s jednog prirodnog jezika na drugi.

<тип 2>- jezici bez konteksta. Kontekstni jezici leže u osnovi sintaktičkih konstrukcija moderni jezici programiranje.

<тип 3>- obični jezici. Oni su najčešći i široko korišteni u području projektiranja računalnih sustava. Za rad s njima koriste se regularni skupovi, regularni izrazi i konačni automati.

Zaključak: klasifikacijski tip jezika određuje koja se gramatika može koristiti za konstruiranje jezične rečenice i kako je prepoznati.

Za mnoge programske jezike postoje posebno formulirane izjave koje vam omogućuju da provjerite pripada li jezik određenoj vrsti. Takvi iskazi nazivaju se leme.

Konačni automati koriste memoriju i obrađuju niz ulaznih simbola koji pripadaju konačnom skupu. Matematički, stroj stanja je opisan na sljedeći način:

gdje je V=() - abeceda unosa;

Q=() - abeceda stanja;

Prijelazna funkcija;

Početno stanje stroja;

F - konačno stanje stroja;

Konačni stroj može se konvencionalno prikazati sljedećim dijagramom (slika 2.1).

Slika 2.1 - Pojednostavljeni dijagram konačnog automata

Kontrolni uređaj (CU) može čitati znakove sekvencijalno, pomicanjem slijeva nadesno. Upravljački uređaj može biti u različitim stanjima: početak rada: ; po završetku F. Prijelaz iz stanja u stanje provodi se u skladu s prijelaznom funkcijom. U tom smislu, konačni automat se može predstaviti na sljedeći način:

Ova naredba znači da je automat stanja u stanju, čita simbol i ulazi u stanje.

Dakle, državni stroj je prepoznavanje jezika.

Zadatak parsiranja je izgraditi prepoznavač za ovaj jezik na temelju postojeće gramatike (programski jezik je poznat).

Prepoznavači se mogu klasificirati ovisno o vrsti komponenti koje ih čine:

Uređaj za očitavanje;

Uređaji za upravljanje memorijom.

Ovisno o vrsti uređaja za očitavanje, prepoznavači mogu biti jednostrani i dvostrani. Jednosmjerni prepoznavači omogućuju čitaču da se kreće samo u jednom smjeru kada čita ulazne znakove. Dvosmjerni prepoznavači omogućuju kretanje u oba smjera.

Ovisno o vrsti upravljačkih uređaja, prepoznavači su:

deterministički;

Nedeterministički.

Prepoznavač je deterministički ako u svakom koraku njegovog rada postoji jedna moguća konfiguracija u koju će prepoznavač ići u sljedećem koraku.

Prema vrsti memorije prepoznavači su:

1) bez memorije;

2) s ograničenom memorijom;

3) s neograničenom memorijom.

Jedan od načina da se opiše algoritam za prepoznavanje jezika je navođenje uređaja za prepoznavanje.

Za uređaje bez konteksta, takvi uređaji su strojevi s memorijom spremnika.

Memorija za pohranjivanje je organizirana po principu prvi ušao, zadnji izašao.

Proces prevođenja izvornog programa u objektni program obično se dijeli na nekoliko podprocesa (faza). Glavne faze prevođenja su:

1) leksička analiza;

2) sintaktička analiza;

3) semantička analiza;

4) sinteza objektnog programa.