Post on 24-Nov-2015
description
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.