Zadaci
1. Kreirati YACC specifikaciju za generisanje sintaksnog analizatora switch strukture.
Switch struktura je definisana sledećim skupom smena:
SwitchStatement → switch (Expression) { CaseList DefaultPart };
CaseList → CaseList CaseItem  CaseItem
CaseItem → case CONST: Statement JumpStatement
Statement → Assignment  SwitchStatement
Assignment → ID = Expression;
Expression → Expression Operator Expression  ID  CONST
Operator → +  -  *  /
JumpStatement → break  return
DefaultPart → default: Statement JumpStatement
Analizator treba da prijavi sve greške u zapisu (ukoliko postoje) ili poruku da grešaka
nema u zapisu. Token ID označava identifikator (niz slova, cifara i _ u kojem prvi
znak ne može biti cifra), a CONST je celobrojna konstanta (označeni ili neopznačeni
niz dekadnih cifara).
2. Kreirati YACC specifikaciju za generisanje sintaksnog analizatora enum tipa. Tip
enum definisan je sledećom gramatikum:
EnumType → enum ID { ConstantList };
ConstantList → ConstantList , ConstantDefinition  ConstantDefinition
ConstantDefinition → ID  ID = CONST
Analizator treba da prijavi sve greške u zapisu (ukoliko postoje), a ukoliko greške ne
postoje da odštampa tabelu simboličkih konstanti koje su tipom enum deinisane.
U okviru zadatka kreirati i Lex specifikaciju potrebnu za generisanje
odgovarajućeg leksičkog analizatora. Token ID označava identifikator (niz slova,
cifara i _ u kojem prvi znak ne može biti cifra), a CONST je celobrojna konstanta
(označeni ili neopznačeni niz dekadnih cifara ili niz oktalnih cifara sa prefiksom 0 ili
niz heksadekadnih cifara sa prefiksom 0x).
3. Za gramatiku zafdatu sledećim skupom smena:
E → E O E  ( E )  NUM
O → +-* /
kreirati YACC specifikaciju za generisanje interpretatora pri čemu token NUM
predstavlja neoznačene kostante u Paskalu čiji je šablon:
<niz_cifara>[.[<niz_cifara>]][E[±]<niz_cifara>]
4. Kreirati YACC specifikaciju za generisanje interpretatora jezika definisanog
sledećom gramatikom:
Program → begin NizNaredbi end
NizNaredbi → NizNaredbi ; Naredba Naredba
Naredba → Ulaz Izlaz  Dodela
Dodela → ID = Izraz
Izraz → Izraz + Izraz  Izraz * Izraz  ( Izraz )  ID  const
Ulaz → read ( ID )
Izlaz → write ( Izraz )
Terminalni simbol ID označava identifikator (niz velikih slova engleske azbuke i
cifara u kojiem prvi znak ne može biti cifra i u kojem je važeći samo početni podniz
od 8 znakova), a const je označena ili neoznačena celobrojna konstanta zapisana u
dekadnom, oktalnom ili heksadekadnom brojnom sistemu. (Okralne konstante
počinju prefiksom ’0#’, a heksadekadne jednim od prefiksa ’16#’ ili samo ’#’).
5. Kreirati YACC specifikaciju za generisanje interpretatora jezika definisanog
sledećom gramatikom:
Blok → { Opisi ; IzvrsneNaredbe }
Opisi → NOpisa  Opisi ; NOpisa
NOpisa → Type ListaPromenljivih
ListaPromenljivih → ID  ListaPromenljivih , ID
IzvrsneNaredbe ::= Naredba IzvrsneNaredbe ; Naredba
Naredba → ID = Izraz
Izraz → Izraz + IzrazT  IzrazT
IzrazT → IzrazT * IzrazF  IzrazF
IzrazF → ( Izraz )  CONST  ID
Type → int  float
Token CONST označava konstante čiji je zapis definisan sledećim šablonom:
<niz_cifara>[.[<niz_cifara>]]
Token ID označava identifikator (niz slova, cifara i ‘_‘ u kojem prvi znak ne može
da bude cifra)
NAPOMENA: Interpretator treba da odštampa rezultat svake izvršne naredbe i da
prijavi gresku ukoliko nije uspeo da izvršenje dovede do kraja.
Download

Zadaci