You are on page 1of 6

1

LL(1) gramatika s akcijama izgradnje saetog sintaksnog stabla


Zadatak: Oblikovati jezik J2 koji ima slijedea svojstva:
Program jezika J2 moe imati samo jedan blok. Blok sadri listu instrukcija. Niti jedna
instrukcija (osim jedinog bloka) ne moe sadravati druge instrukcije.
Svojstva instrukcija:
a) Instrukcija ulaza
Sintaksa: uitaj( identifikator);
Primjer: uitaj( A );
gdje je A identifikator memorijskog spremnika.
Semantika: ita sa standardnog ulaza upisanu vrijednost, utvruje njen podatkovni tip i
sprema vrijednost u memorijski spremnik pridruen identifikatoru navedenom u instrukciji.
b) Instrukcija izlaza
Sintaksa: ispii( algebasko-logiki izraz);
Primjer: ispii( (A + 2)*3);
Semantika: pie izraunatu vrijednost algebarsko-logikog izraza na standardni izlaz
c) Instrukcija pridjeljivanja
Sintaksa: identifikator = algebarsko-logiki izraz;
Primjer: B = (A+2)*3;
Semantika: pridjeljuje vrijednost izraza varijabli, tj sprema u memorijski spremnik pridruen
identifikatoru.
Algebarsko logiki izraz se zapisuje sa zagradama, kako je uobiajeno u algebri.
Gramatika jezika J2 bez komentara
Ideja: nazivi nezavrnih i zavrnih znakova su deskriptivni, pa je gramatika razumljiva
izborom nazivlja.
Program -> Blok 'EOF'
;
Blok -> ListaInstrukcija
;
ListaInstrukcija -> Instrukcija ListaInstrukcija
| 'eps'
;
Instrukcija -> Pridjeli
| Ulaz
| Izlaz
;
Pridjeli -> IDN '=' Izraz ';'
;
Ulaz -> 'uitaj' '(' IDN ')' ';
;
Izlaz -> 'ispii' '(' Izraz ')' ';'
;

2
Izraz -> Term ListaIzraza
;
ListaIzraza -> '+' Term ListaIzraza
| 'eps'
;
Term -> Produkt ListaTerma
;
ListaTerma -> '*' Produkt ListaTerma
| 'eps'
;
Produkt -> '(' Izraz ')'
| IDN
| 'Z'
;
IDN -> 'idn'
;
Obogaivanje gramatike akcijama za izgradnju saetog sintaksnog stabla
Akcija za izgradnju:
A -> '{' IME_VORA '(' LISTA_PARAMETARA ')' '}'
;
IME_VORA -> 'Blok' | 'Varijabla' | 'Pridjeli' | 'Uitaj' | 'Ispii' |
'Zbroj' | 'Produkt' | 'CijeliBroj' | 'Identifikator'
;
LISTA_PARAMETARA -> PARAMETAR VRIJEDNOST LISTA_PARAMETARA
| 'eps'
;
PARAMETAR -> 'izvor' | 'lista' | 'idn' | 'izraz' | 'varijabla' | 'pocetak'
| 'kraj' | 'cistiulaz' | 'lijevo' | 'desno' | 'vrijednost' | 'ime'
;
VRIJEDNOST -> '=' OZNAKA
;
OZNAKA -> 'novi' | 'stog' | 'ulaz' INDEKS
;
INDEKS -> '[' 'Z' ']'
;
Objanjenje:
IME_VORA je naziv klase vora apstraktnog sintaksnog stabla.
Izgraditelj stabla napravi instancu navedene klase i pozove njenu metodu
Izgradi(). Ulazi metode Izgradi su:
- objekt koji sadri listu parametara
- objekt koji sadri listu ve proitanih leksikih jedinki
- objekt izdraditelja stabla sa stogom vorova stabla
Metoda Izgradi() svakog vora izgrauje svoja polja i to:
- na temelju definiranog ulaza iz liste leksikih jedinki
- na temelju stoga izgraditelja stabla

3
Gramatika LL(1) s akcijama izgradnje stabla
Program -> Blok 'EOF'
;
Blok -> ListaInstrukcija {Blok(izvor=novi, lista=stog)}
;
ListaInstrukcija -> Instrukcija ListaInstrukcija
| 'eps'
;
Instrukcija -> Pridjeli
| Ulaz
| Izlaz
;
Pridjeli -> IDN {Varijabla(idn=stog)} '=' Izraz ';' {Pridjeli(izraz=stog,
varijabla=stog, pocetak=ulaz[0], kraj=ulaz, cistiulaz)}
;
Ulaz -> 'uitaj' '(' IDN ')' ';' {Varijabla(idn=stog);
Uitaj(varijabla=stog, pocetak=ulaz[0], kraj=ulaz, cistiulaz)}
;
Izlaz -> 'ispii' '(' Izraz ')' ';' {Ispii(izraz=stog, pocetak=ulaz[0],
kraj=ulaz, cistiulaz)}
;
Izraz -> Term ListaIzraza
;
ListaIzraza -> '+' Term ListaIzraza {Zbroj(desno=stog, lijevo=stog)}
| 'eps'
;
Term -> Produkt ListaTerma
;
ListaTerma -> '*' Produkt ListaTerma {Produkt(desno=stog, lijevo=stog)}
| 'eps'
;
Produkt -> '(' Izraz ')'
| IDN {Varijabla(idn=stog)}
| 'Z' {CijeliBroj(izvor=novi, vrijednost=ulaz)}
;
IDN -> 'idn' {Identifikator(izvor=novi, ime=ulaz)}
;

4
Virtualni stroj

Virtualna programska memorija


Virtualna podatkovna memorija
Virtualni procesor

Virtualni = program koji posreduje izmeu realnog (fizikog)


Virtualna programska memorija
-

Jednodimenzionalno polje instrukcija


Upii( adresa = indeks polja instrukcija, vrijednost)
itaj( adresa ) : vraa instrukciju na adresi

Virtualna podatkovna memorija


-

Jednodimenzionalno polje podataka


Upii( adresa = indeks polja instrukcija, vrijednost)
itaj( adresa ) : vraa podatak na adresi

Virtualni procesor
a) Interpreter sintaksnog stabla
- izvodi vorove apstraktnog sintaksnog stabla
- svaki vor ima metodu Izvedi( )
- struktura stabla nije pogodna za skokove
-

pokaziva tekueg vora sintaksnog stabla

b) Troadresne procesorske instrukcije:


INSTRUKCIJA OPERAND_1, OPERAND_2, REZULTAT
Gdje su: INSTRUKCIJA = oznaka instrukcje koju procesor zna izvesti
OPERAND_1, OPERAND_2, REZULTAT = adrese podatkovne memorije
-

pokaziva tekue instrukcije u virtualnoj programskoj memoriji

c) Stogovno orjentirani stroj


-

pokaziva tekue instrukcije u virtualnoj programskoj memoriji

raunski stog s operacijama:


o stavi( podatak) / eng. push
o izvuci( ) : vraa podataka s vrha stoga /eng. pull, pop
o dupliciraj: dodaje na vrh stoga kopiju podatka koji je ve na vrhu stoga
o zamijeni() : zamjenjuje mjesta dvaju podataka na vrhu stoga / eng. swap
o unarniMinus: mijenja predznak podatku na vrhu stoga
o zbroji: izvlai dva podatka s vrha stoga i stavlja njihov zbroj na vrh stoga
o oduzmi:
o pomnoi

5
o podijeli
o dobavi: uzima adresu s vrha stoga
ita iz podatkovne memorije podatak na adresi
stavlja ga na vrh stoga
o spremi: na vrhu stoga je adresa, a ispod nje podatak
izvlai sa stoga adresu
izvlai sa stoga podatak
pie u podatkovnu memoriju podatak na adresu
itd.

6
Projektni zadaci
1. Programski jezik prikladan za uenike osnovne kole (5, 6 razred).
Jezini procesor:
2. algebre sudova (Boolove algebre)
3. matrinog rauna
4. kompleksnih brojeva
5. polinoma
6. funkcija
7. algebarsko logikih izraza

You might also like