37
Fakultet organizacionih nauka, Beograd, 2007. P R O G R A M S K I J E Z I C I Sintaksa programskih jezika Dr Milica Vučković Fakultet organizacionih nauka Beograd, 2014

Sintaksa programskih jezika

Embed Size (px)

DESCRIPTION

Sintaksa programskih jezika

Citation preview

  • Fakultet organizacionih nauka, Beograd, 2007.

    P R O G R A M S K I J E Z I C I

    Sintaksa programskih jezika

    Dr Milica VukoviFakultet organizacionih nauka

    Beograd, 2014

  • Sadraj

    Uvod u sintaksu programskih jezika

    Fomalne metode za opis sintakseprogramskih jezika

    Regularne gramatike, regularni izrazi

    Konteksno slobodne gramatike, BNF

    Fakultet organizacionih nauka, Beograd, 2007.

  • Uvod u sintaksu programskih jezika Jezik (prirodni ili vestaki) sastoji od skupa stringova

    definisanim nad nekim alfabetom

    Alfabet je konaan skup karaktera.

    Alfabet dekadnih cifara : (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

    Alfabet malih engleskih slova : (a, b, c, d, ..., w, x, y, z)

    Alfabet programskih jezika: kod veine programskih jezika alfabet ine karakteri iz ASCII skupa , savremeni jezici kao sto su Java i C# koriste Unicode

  • Uvod u sintaksu programskih jezika

    String (re) je niz znakova iz nekog alfabeta.

    brojevi 1990 i 2013 su rei nad alfabetom dekadnih cifara.

    rei begin i end su rei nad engleskim alfabetom malih slova.

    Fakultet organizacionih nauka, Beograd, 2007.

  • Uvod u sintaksu programskih jezika

    Rei su osnovni, nedeljivi elementi prirodnih jezikaPostoje: razliite vrste rei (imenice, glagoli, ...) razliiti oblici rei (padei, pridevi, ...)

    Slino vai i u programskim jezicimaTokeni u programskim jezicima analogni su reima u govornom jeziku.

    Fakultet organizacionih nauka, Beograd, 2007.

  • Uvod u sintaksu programskih jezika Token je najmanja sintaksna jedinica u programu

    koja ima znaenje

    Tokeni u PJ se klasifikuju kao:

    Identifikatori Kljune rei Operatori Numerike konstante Specijalni znaci (zagrade, separatori, ..)

  • Uvod u sintaksu programskih jezika

    Fakultet organizacionih nauka, Beograd, 2007.

    Separator;Kljuna rebreakZatvorena zagrada)Num. konstanta20Rel. operator>IdentifikatorxOtvorena zagrada(Kljuna reif

    if (x > 20)break;

  • Uvod u sintaksu programskih jezika

    Kako moemo precizno da definiemo stringove(rei) tako da su u jeziku? Jedan nain je pomou renika jezika koji sadri listu

    svih rei (stringova) jezika. Drugi nain je pomou definisanja skupa pravila za

    formiranje stringova koji pripadaju nekom jeziku.

    Na koji nain kombinovati osnovne jezike elementeu ispravne sloenije jezike konstrukcije (reenice)?

    Fakultet organizacionih nauka, Beograd, 2007.

  • Uvod u sintaksu programskih jezikaIzuavanje programskih jezika, slino izuavanju prirodnihjezika, moze se podeliti na izuavanje

    Sintakse , opisuje strukturu (formu) programa u jezikuSintaksna forma while instrukcije je:

    while ()

    Semantike, opisuje znaenje programskih konsrukcija

    Fakultet organizacionih nauka, Beograd, 2007.

  • Uvod u sintaksu programskih jezika

    Postoje dve komponente sintakse programskih jezika:

    Leksika struktura. Leksika struktura odreujekako se nizovi karaktera u tekstu programa izdvajaju ikategoriu u tokene.

    Sintaksna struktura. Sintaksna struktura jezikaodreuje kako se tokeni grupiu u sloenije strukture.Sintaksna struktura esto se referencira kaogramatika

    Fakultet organizacionih nauka, Beograd, 2007.

  • Fomalne metode za opis sintakse programskih jezika

    Za opis sintakse programskih jezika koriste seformalne metode specifikacije koje omoguavaju dase gramatika jezika definie jasno i nedvosmisleno.

    Formalne specifikacije su posebno pogodne zaimplementaciju programskih jezika.

    Fakultet organizacionih nauka, Beograd, 2007.

  • Fomalne metode za opis sintakse programskih jezika

    Gramatike predstavljaju meta-jezik baziran naformalnoj teoriji koju je razvio lingvinista NoamChomski, polovinom pedesetih godina prolog veka

    Zapravo on je razvio gramatike za cetiri vrste jezika,od kojih se samo dve koriste za opis sintakseprogramskih jezika:

    regularne (eng. regular) i konteksno slobodne (eng. context-free)

    gramatike

    Fakultet organizacionih nauka, Beograd, 2007.

  • Regularne gramatike

    Najednostavnija klasa gramatika prema hijerarhijiomskog.

    Koriste se za opis leksike strukture (tokena) jezika

    Regularne gramatike mogu se koristit za konstrukcijuleksikog analizatora. Postoje alati za automatskogenerisanje skenera na osnovu regularnih izraza.

    Regularne gramatike su znaajno slabije u svojimmogunostima u odnosu na konteksno slobodnegramatike

  • Regularni izrazi

    Leksika specifikacija zadaje se u formalnojnotaciji preko regularnih izraza.

    Regularni izrazi su abloni (eng. pattern) zaprepoznavanje osnovnih leksikih elemenatajezika (tokena).

    Regularni izrazi obezbeuju fleksibilne naine zapretraivanje i manipulaciju teksta, koji sebaziraju na ablonima.

    Fakultet organizacionih nauka, Beograd, 2007.

  • Regularni izrazi Regularni izrazi prvi put su realizovani u UNIX

    okruzenju Notacija regularnih izraza prvi put ugradjena u tekstualne

    editore ( QED i ed ), a kasnije se regularni izrazi iroko koriste iu veem broju UNIX pomocnih programa (grep, expr, vi, lex, )

    Regularni izrazi koriste se u tekstualnim editorima,alatima za pretraivanje teksta i programskim jezicima U programskim jezicima kao sto su Perl, Ruby, Awk, Tcl

    regularni izrazi ugradjeni su u sintaksu jezika Programski jezici kao sto su C, C++, C#, Java I Pyton

    obezbeuju regularne izraze preko standardnih biblioteka.

  • Regularne izrazi Karakter iz alfabeta je prost regularni izraz koji

    prepoznaje takav karakter

    Prazan string je regularni izraz i oznaava se sa

    Sloeniji regularni izrazi formiraju se iz prostijihkorienjem operatora

    Fakultet organizacionih nauka, Beograd, 2007.

  • Regularne izrazi

    Ako je R regularni izraz: R* prepoznaje nula ili vie ponovljenih R izraza R+ prepoznaje jedan ili vie ponovljenih R izraza

    Ako su R i S regularni izrazi, RS prepoznaje R iza koga sledi S(konkatenacija) R|S prepoznaje ili R ili S (alternativa)

    Fakultet organizacionih nauka, Beograd, 2007.

  • Regularni izrazi

    Regularni izraz Tekst koji prepoznaje

    A prepoznaje A

    IF prepoznaje IF

    B* prepoznaje nula ili vie B, B, BB, BBB,

    B+ prepoznaje jedan ili vie BB, BB, BBB, . .

    Fakultet organizacionih nauka, Beograd, 2007.

  • Regularni izraziRegularni izraz Tekst koji prepoznaje

    THEN|ELSE ili THEN ili ELSEa|b+ ??ba* ???

    [abc] [ ] je metakarakter koji formira regularni izraz za prepoznaje bilo koji od navedeni znakova. Ekvivalentan regularni izraz je ..?

    [0-9] prepoznaje jednu od cifara u opsegu od 0 do 9; - je metakarakter

    Fakultet organizacionih nauka, Beograd, 2007.

  • Regularni izrazi[0-9]+ prepoznaje cele brojeve bez znaka

    [A-Z][a-z]+ prepoznaje rei koje poinju velikim slovom iza koga sledi jedno ili viemalih slova

    -?[0-9]+ ? metakarakter ceo broj sa opcionim predznakom -

    ac?b ???

    a(ba)*cc acc, abacc, ababacc, ( ) metakarakter

  • Regularni izraziVebanja: Formirati regularni izraz za prepoznavanje svih binarnih stringova

    Formirati regularni izraz za prepoznavanje svih binarnih stringovakoji se zavravaju sa nulom

    Dat je regularni izraz: cc(de)*dd. Koje od navedenih stringova jemoguce prepoznati preko datog regularnog izraza:

    a.) ccddb.) ccdddc.) ccdeddd.) ccdededde.) ccdeddd

    Fakultet organizacionih nauka, Beograd, 2007.

  • Fakultet organizacionih nauka, Beograd, 2007.

    Leksika analiza Leksika analiza je faza u procesu translacije programa

    Leksiki analizator (skener) prevodi tekst programa u niztokena (tj. prepoznaje tokene u ulaznom tekstu, na osnovuzadatih leksikih specifikacija regularnih izraza)

  • Leksika analiza

    softverski alati za generisanje leksikog analizatora (skenera )

    Lex (lexical analyzer)

    FLex ((fast lexical analyzer generator))

    JLex (A Lexical Analyzer Generator for Java)

    Fakultet organizacionih nauka, Beograd, 2007.

  • Fakultet organizacionih nauka, Beograd, 2007.

    Konteksno slobodne gramatike Sintaksna struktura jezika se opisuje pomou gramatike

    koja definie pravila za pisanje korektnih programa unekom programskom jeziku

    konteksno-slobodne gramatike (CFG-Contex FreeGrammars)- Koriste se za formalni opis sintakse PJ

    CFG obino se zapisuju u BNF(Backus-Naur form) notaciji

  • Fakultet organizacionih nauka, Beograd, 2007.

    BNF notacijaBNF(Backus-Naur form) notacija

    - Formalna notacija za opis sintakse jezika

    - BNF je meta jezik za programske jezike

    - BNF prvi put korienja za opis sintakseprogramskogh jezika ALGOL 60

  • BNF notacijaBNF koristi apstrakcije za opis sintaksnih struktura

    apstraktna definicija instrukcija dodeljivanja:< assign> = a |b | c

    | + | -

    < assign> Apstrakcija koja se definie (neterminal)

    = definicija pravila, sadri referencena druge apstrakcije (neterminale)

  • Fakultet organizacionih nauka, Beograd, 2007.

    BNF notacija Sintaksa u BNF notaciji se specificira korienjem:

    - Skupa terminala (tokena)- Skupa neterminala- Skupa produkcionih pravila- Startni simbol ( mora da bude neterminal)

    Produkciono pravilo u BNF notaciji:N

    N - neterminal - sekvenca terminala i neterminala

  • Fakultet organizacionih nauka, Beograd, 2007.

    Derivacije sintaksne konstrukcije se izvode iterativnom

    primenom pravila

    derivacija poinje od specijalnog neterminala tzv.startnog simbola, a zavrsava se sa nizom tokena

    leftmost i rightmost derivacija kod leve derivacije krajnji levi neterminal u

    produkcionom pravilu zamenjuje se sa pravilom kojega definie (ili jednim od svojih alternativnih pravila)

  • Ilustracija derivacije gramatika opisuje ceo broj

    -> -> | -> 0|1|2|3|4|5|6|7|8|9

    leftmost derivacija da li je 738 ceo broj?? =>

    => => => => 7 => 73 => 738

    Fakultet organizacionih nauka, Beograd, 2007.

  • Ilustracija derivacije< assign> = a |b | c +

    | * | ()|

    < assign> = a = a = *a = b *a = b *( )a = b *( + )a = b *( a + )a = b *( a + )a = b *( a + )

    a = b* ( a + b ) leftmost derivacija

    Data gramatika opisujedodeljivanje ija desna strana jearitmetiki izraz sa operatorima+, * i zagradama.

  • Ilustracija derivacije U datoj gramatici velika slova ukazuju na neterminale, a

    mala slova na terminale:S -> AaBb A -> Ab | b B -> aB | a

    Koji od navedenih stringova pripadaju jeziku koji jedefinisan pomocu date gramatike:

    a.) baabb.) bbbabc.) bbaaaaad.) bbaab

  • Ilustracija derivacijeData gramatika:S -> AaBb

    A -> Ab | b B -> aB | a

    Provera za string bbaab:

    S -> AaBb-> AbaBb-> bbaBb-> bbaab

  • DerivacijeVebanje: U datoj gramatici velika slova ukazuju na neterminale, a

    mala slova na terminale:S -> a S c B | A | b A -> c A | c B -> d | A

    Koji su od navedenih stringova pripadaju jeziku koji je definisan pomou date gramatike

    a.) aabcdcd b.) acccbd c.) acd d.) accc

    Fakultet organizacionih nauka, Beograd, 2007.

  • Fakultet organizacionih nauka, Beograd, 2007.

    Parsna stabla Atraktivna karakteristika gramatika je da opisuju hijerarhijsku

    sintaksnu strukturu jezika.

    Takve hijerarhijske strukture nazivaju se parsnim stablima

    Drugi nain da se pokae da odreena sintaksna konstrukcijapripada jeziku definisanom BNF gramatikom je opis izvoenjepreko parsnog stabla. Svakom koraku izvoenja odgovara novopodstablo.

    Na sledeoj strani derivacija instrukcije dodeljivanjaa = b * ( a + b ) reprezentovana je preko parsnog stabla.

  • Fakultet organizacionih nauka, Beograd, 2007.

    Primer parsnog stabla zaa = b * ( a + b )

    +

    =

    a

    (

    )

    b

    *

    a c

    U prasnom stablusvaki interni vor jeneterminal

    njegova deca sudesni deo pravila zataj neterminalListovi su uvekterminali

    Koreni vor je uvekstartni simbol

  • Fakultet organizacionih nauka, Beograd, 2007.

    Sintaksna analiza Sintaksna analiza je faza u procesu translacije u kojoj se provera

    da li je program napisan skaldu sa gramatikom jezika

    Parser ( sintaksni analizator) je program koji, na osnovu dategramatike, proverava da li je data sekvenca tokena i neterminalaispravna ili ne, i generie parsno stablo koje reprezentuje sintaksnustrukturu programa

  • Sintaksna analiza Softverski alatati za generisanje parsera

    Yacc (Yet Another Compiler-Compiler)

    Bison

    ANTLRWorks (Another Tool For Language Recognition)

    Fakultet organizacionih nauka, Beograd, 2007.